首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让python‘.’.encode(‘unicode_escape’)返回ascii的转义代码?

如何让python‘.’.encode(‘unicode_escape’)返回ascii的转义代码?
EN

Stack Overflow用户
提问于 2017-02-06 21:19:07
回答 2查看 826关注 0票数 2

我试图使用python字符串的encode方法返回字符的unicode转义代码,如下所示:

代码语言:javascript
复制
>>> print( 'ф'.encode('unicode_escape').decode('utf8') )
\u0444

这对于非ascii字符很好,但是对于ascii字符,它只返回ascii字符本身:

代码语言:javascript
复制
>>> print( 'f'.encode('unicode_escape').decode('utf8') )
f

所需的输出将是\u0066。这个剧本是为了教学目的。

如何获得所有字符的unicode十六进制代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-06 21:28:03

可以使用ord,根本不需要编码/解码:

代码语言:javascript
复制
>>> '"\\U{:08x}"'.format(ord('f'))  # ...or \u{:04x} if you prefer
'"\\U00000066"'
>>> eval(_)
'f'
票数 5
EN

Stack Overflow用户

发布于 2017-02-06 21:54:06

您必须手动这样做;如果假设所有输入都在Unicode BMP中,那么简单的正则表达式可能是最快的;这将用它们的\uhhhh转义替换每个字符:

代码语言:javascript
复制
import re

def unicode_escaped(s, _pattern=re.compile(r'[\x00-\uffff]')):
    return _pattern.sub(lambda m: '\\u{:04x}'.format(
        ord(m.group(0))), s)

我已经明确地将模式限制在BMP上,以便优雅地处理非BMP点。

演示:

代码语言:javascript
复制
>>> print(unicode_escaped('foo bar ф'))
\u0066\u006f\u006f\u0020\u0062\u0061\u0072\u0020\u0444
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42077422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档