我在理解unicode表达式到它们各自的字符的翻译时遇到了一些困难。我一直在研究unicode规范,遇到了各种格式的字符串U+1F600
。据我所见,似乎没有一个内置函数知道如何将这些字符串转换为Python的正确格式,例如\U0001F600
。在
在我的程序中,我做了一个小正则表达式,它将找到这些U\+.{5}
模式,并将U+
替换为\U000
。但是,我发现这种语法对于所有unicode字符都是不一样的,例如实际上应该从U+200D
转换为\u200D
的零宽度联接。在
因为我不知道正确的unicode转义序列的每个变体,所以处理这种情况的最佳方法是什么?是因为这些特殊字符的数量有限,我只能检查一下,还是说我完全走错了路?在
Python版本是2.7。
U+NNNN
只是用于讨论Unicode的常用符号。Python对于单个Unicode字符的语法是:u'\xNN'
对于通过U+00FF的Unicode字符u'\uNNNN'
对于通过U+FFFF的Unicode字符u'\U00NNNNNN'
对于通过U+10FFFF的Unicode字符(最大值)注意:
N
是十六进制数字。输入字符时使用正确的符号。您可以使用较长的符号,即使是低字符:
通过编程,您还可以使用
unichr(n)
(python2)或chr(n)
(python3)生成正确的字符。请注意,在Python3.3之前,有Python的Unicode版本。
unichr/chr
只能支持sys.maxunicode
,窄版本中为65535(0xFFFF),宽版本为1114111(0x10FFFF)。python3.3统一了构建,并用Unicode解决了许多问题。如果您正在处理
^{pr2}$U+NNNN
格式的文本字符串,这里有一个正则表达式(python3)。它查找U+
和4-6个十六进制数字,并将它们替换为chr()
版本。请注意,ASCII字符(Python2)或可打印字符(Python3)将显示实际字符,而不是转义版本。我认为最可靠的方法是将数字解析为整数,然后使用
unichr
查找该代码点:注意:在python3上,它只是
chr
。您可以查看
json
模块实现。似乎不是那么简单:(来自cpython-2.7.9/Lib/json/解码器.py第129-138行)
我认为直接使用
^{pr2}$json.loads
会更容易:相关问题 更多 >
编程相关推荐