我正在尝试打印一个没有特定编码十六进制的unicode字符串。我从facebook获取这个数据,它在UTF-8的html头中有一个编码类型。当我打印类型时-它说它是unicode的,但是当我尝试用unicode解码它时-转义告诉我有一个编码错误。当我使用decode方法时,为什么它会尝试编码?
代码
a='really long string of unicode html text that i wont reprint'
print type(a)
>>> <type 'unicode'>
print a.decode('unicode-escape')
>>> Traceback (most recent call last):
File "scfbp.py", line 203, in myFunctionPage
print a.decode('unicode-escape')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 1945: ordinal not in range(128)发布于 2011-01-26 07:20:38
当您打印到控制台时,Python尝试将字符串编码(转换)为您终端的字符集。如果这不是UTF-8,或者没有映射字符串中的所有字符,它将发出抱怨并抛出异常。
当我快速处理数据时,这经常会让我感到困惑,例如,其中包含土耳其字符。
如果你通过Windows命令提示符运行python.exe,你可以在这里找到一些解决方案:What encoding/code page is cmd.exe using。基本上,您可以使用chcp更改代码页,但它相当麻烦。我会跟随Mark's advice并使用类似IDLE的东西。
发布于 2011-01-26 19:48:19
>>> print type(a)
<type 'unicode'>
>>> a.decode('unicode-escape')当我使用decode方法时,它为什么要尝试编码?
因为你解码成Unicode,然后你编码。您刚刚尝试将unicode字符串解码为unicode。然后,它所做的第一件事就是尝试使用ascii编解码器将其转换为字符串。这就是为什么你会得到:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2110' in position 3: ordinal not in range(128)记住: Unicode不是一种编码。其他的都是,比如ascii,utf8,拉丁语-1等等。
这种隐式编码在Python3中消失了,因为它混淆了人们。
https://stackoverflow.com/questions/4799917
复制相似问题