Python Unicode对变量Bug的强制转换
我发现了这种与unicode和变量相关的奇怪Python行为:Python Unicode对变量Bug的强制转换,python,variables,unicode,casting,Python,Variables,Unicode,Casting,我发现了这种与unicode和变量相关的奇怪Python行为: >>> u"\u2730".encode('utf-8').encode('hex') 'e29cb0' 这是我需要的预期结果,但我希望动态控制第一部分(“u\u2730”) 正如你所看到的,结果不是原来的结果。python似乎将“myvar”视为字符串而不是unicode。我错过什么了吗 无论如何,我的最终目标是将Unicode从\u0000循环到\uFFFF,将它们转换为字符串,并将字符串转换为十六进制。有简
>>> u"\u2730".encode('utf-8').encode('hex')
'e29cb0'
这是我需要的预期结果,但我希望动态控制第一部分(“u\u2730”)
正如你所看到的,结果不是原来的结果。python似乎将“myvar”视为字符串而不是unicode。我错过什么了吗
无论如何,我的最终目标是将Unicode从\u0000循环到\uFFFF,将它们转换为字符串,并将字符串转换为十六进制。有简单的方法吗?您将Unicode转义序列与
\u
字符混淆。这就像用实际的换行符混淆r“\n”
(或“\\n”
)一样。您想使用编解码器。原始unicode\u escape\u解码
解码
带有'unicode\u escape'
的str
:
>>> import codecs
>>> a='20'
>>> b='27'
>>> myvar='\u'+a+b.decode('utf-8')
>>> myvar
u'\\u2027'
>>> myvar.decode('unicode_escape')
(u'\u2027', 6)
>>> print(myvar.decode('unicode_escape')[0])
‧
Python 2中的unichr()
或Python 3中的chr()
是从数字构造字符的方法<代码>\uxxx转义代码只能直接在代码中键入
Python 2:
>>> a='20'
>>> b='27'
>>> unichr(int(a+b,16))
u'\u2027'
Python 3:
>>> a='20'
>>> b='27'
>>> chr(int(a+b,16))
'‧'
您正在将unicode转义序列与实际的
\u
混淆请注意,\u
本身不是有效的unicode字符串,这没有意义:SyntaxError:(unicode错误)'UnicodeScape'编解码器无法解码位置0-1的字节:截断的\uxxx转义
。还要注意的是,myvar
的\uuu repr\uuuu
表示是u'\\u2027'
(注意转义),print
ing(使用\uu str\uuu
形式)在这里没有帮助。使用两个u“\u2730”是获取我需要的信息的唯一方法。你能详细解释一下吗?@user2287463再说一遍,你把转义序列和字符本身搞混了。这就像把r“\n”
与实际的换行符混淆一样。('\\u'+a+b)。decode('unicode\u escape')
更短。以字节字符串开始。
>>> import codecs
>>> a='20'
>>> b='27'
>>> myvar='\u'+a+b.decode('utf-8')
>>> myvar
u'\\u2027'
>>> myvar.decode('unicode_escape')
(u'\u2027', 6)
>>> print(myvar.decode('unicode_escape')[0])
‧
>>> a='20'
>>> b='27'
>>> unichr(int(a+b,16))
u'\u2027'
>>> a='20'
>>> b='27'
>>> chr(int(a+b,16))
'‧'