[英]Unicode escape won't work with some characters
我有一个程序,我想在其中使用一些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逃脱了吗?
对于使用C标准库I / O函数的应用程序(如Python所做的),Windows控制台根本不支持Unicode。
虽然原则上你可以像其他评论建议的那样将代码页更改为65001(并将PYTHONIOENCODING环境变量设置为utf-8以匹配),实际上控制台主机对此代码页的支持存在一些长期存在的缺陷。这样你在尝试使用时可能会出现双重打印或挂起。 这通常是无法使用的。
将Unicode从Windows控制台中取出的可靠方法(嗯,尽可能可靠 - 用户仍然必须选择TTF字体以便有机会看到它)是直接调用Win32 WriteConsoleW
/ ReadConsoleW
函数而不是依靠C stdlib。 如果你真的需要这样做, win_unicode_console包将为你包装它。
(通常,更简单的选择是放弃Windows控制台并使用IDE之类的其他环境。)
这是因为您的控制台的默认编码是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
或者您也可以以图形方式更改它以查看此问题以获取更多信息: Windows命令行中的Unicode字符 - 如何?
要在Windows中设置命令提示符以便能够显示utf-8字符串,请使用chcp
命令(对于utf-8 do - chcp 65001
) -
chcp 65001
对于其他此类编码及其相应的代码页(cp),请在此处查看 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.