繁体   English   中英

Unicode转义不适用于某些字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM