Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Unicode对变量Bug的强制转换_Python_Variables_Unicode_Casting - Fatal编程技术网

Python Unicode对变量Bug的强制转换

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,将它们转换为字符串,并将字符串转换为十六进制。有简

我发现了这种与unicode和变量相关的奇怪Python行为:

>>> 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))
'‧'