Unicode转义不适用于某些字符

时间:2015-07-30 17:59:05

标签: python unicode

我有一个程序,我想在其中使用一些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逃脱吗?

3 个答案:

答案 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