在Python 3中打印非ascii字符

时间:2015-05-26 23:07:26

标签: character-encoding python-3.4

所以我想打印像®(保留标志字符)这样的特殊字符。看起来很简单。我找到了someone else trying to do the same thing,但带有版权符号并给它一个旋转,但它出错了:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\u00a9')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xa9' in position 0: character maps to <undefined>

我之前在Python 3.4.2上遇到过这个问题,刚刚将其更新到3.4.3,但它似乎遇到了同样的问题。

另一个有趣的事情是,当我尝试打印这些字符时,python只会出错。如果我不打印它们,那么:

>>> a = '\xae'
>>> if a == '\xae':
...     print(True)
...
True

2 个答案:

答案 0 :(得分:2)

要打印这些字符,您可以使用:

i < j

答案 1 :(得分:1)

当您尝试打印到Windows cmd时它只会出错的原因是因为cmd本身不支持该字符。参见:

  1. this other stack overflow question基本上要求同样的事情。

  2. @Martijn Pieters评论链接到a python.org site addressing print failures,这解释了在Windows上,

  3. 支持的字符现在是更加天真 操作系统,版权标志和储备标志不在此 。集合

  4. 这也解释了为什么当你尝试将其打印时只出错,但你仍然可以在布尔比较中使用它。不确定他们在python 2.X中究竟做了什么才能使其正常运行。