我有一个程序,我想在其中使用一些Unicode字符,例如μ和下标p。当我这样做时,
print u"\xb5"
它完美无缺,但当我这样做时,
print u"\u209A"
我收到此错误消息:
Traceback (most recent call last):
File "C:/Users/tech/Desktop/Circuit Design Tool/Test 2.py", line 1, in <module>
print u"\u209A"
File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u209a' in position 0: character maps to <undefined>
为什么会这样?这些是正确的unicode逃脱吗?
答案 0 :(得分:1)
对于使用C标准库I / O函数的应用程序(如Python),Windows控制台根本不支持Unicode。
虽然原则上您可以像其他评论建议的那样将代码页更改为65001(并将PYTHONIOENCODING环境变量设置为utf-8以匹配),实际上在控制台主机的支持中存在一些长期存在的错误。此代码页,以便您在尝试使用它时可能会出现双重打印或挂起。这通常无法使用。
将Unicode从Windows控制台中取出的可靠方法(嗯,尽可能可靠 - 用户仍然必须选择TTF字体以便有机会看到它)是调用Win32 {{1} } / WriteConsoleW
直接起作用,而不是依赖于C stdlib。如果确实需要这样做,win_unicode_console包将为您包装。
(通常,更简单的选择是放弃Windows控制台并使用IDE之类的其他环境。)
答案 1 :(得分:0)
因为你的控制台的默认编码是cp1252
,它无法解码你的Unicode。相反,您需要另一个适当的编码,如utf-8
。
由于我的终端的默认编码为utf-8
,因此它会正确打印:
>>> print u"\u209A"
ₚ
但如果我使用编码cp1252
,它会引发错误,就像你得到的那样:
>>> u"\u209A".encode('cp1252')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/encodings/cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character '\u209a' in position 0: character maps to <undefined>
>>>
您可以使用Windows中的以下命令将默认编码更改为utf8
:
chcp 65001
或者您也可以通过图形方式更改此问题以获取更多信息:Unicode characters in Windows command line - how?
答案 2 :(得分:0)
要在Windows中设置命令提示符以便能够显示utf-8字符串,请使用chcp
命令(对于utf-8 do - chcp 65001
) -
chcp 65001
对于其他此类编码及其相应的代码页(cp),请查看here。