Python 2.7 在 Python 控制台中将 Unicode 打印为方框

Python 2.7 prints Unicode as a square box in the Python console

我在 Mac 上使用最新的 Python 2 和 pycharm。

在 Python 控制台中,我注意到如果我执行 print u'\u31d4',Python 控制台会打印出一个半方框,㇔。 print u'\u31d2' 也是如此。但是 31d4 应该是 cjk 笔画,如 http://unicode-table.com/en/search/?q=31d4; and 31d2 should be a different stroke, as in http://unicode-table.com/en/search/?q=31d2.

所示

问题:

  1. 我该怎么做才能使 Python 控制台正确打印出这些笔划?

  2. 一个相关问题:Python 控制台目前默认不打印 Unicode 字符,除非我明确调用 print。例如:

    (控制台提示)>>> a = u'\u4e00'

    (控制台提示)>>> a

控制台打印出u'\u4e00'.

只有当我明确使用 print a 时,我才会得到 。我可以更改某处的设置,以便它打印 以响应在控制台中键入 a,而无需调用 print?

看看iPythonQtConsole,它支持Unicode输出很好

问题 1 取决于您 IDE 的字体支持。如果字体不支持该字符,您将获得替换字符。获得更好的字体 and/or 更好 IDE.

问题 2:即 Python2 的交互式控制台默认值:ASCII 输出,非 ASCII 转义码。 Python 3 仍然引用字符串,但打印支持的 Unicode 字符。 print 是呈现字符串的正确方法。您无法更改默认值。这是调试的方式。考虑:

>>> s
u'\xa0\xa0\xa0'
>>> print s

>>>

否则你怎么知道 s 的内容是什么?你知道它的第一种方式是三个 Unicode 字符,它们是 Unicode 代码点 U+00A0,但是渲染三个不间断空格并不能告诉你太多。

问题 2

解释器显示的内容由函数 sys.displayhook 控制。松散地说,默认显示挂钩显示值的 repr 除非它是 None.

要更改 displayhook 只需设置为另一个函数即可。例如:

>>> a = u'\u4e00'
u'\u4e00'
>>> import sys
>>> def my_display(x):
...     if isinstance(x, unicode):
...         sys.stdout.write(x.encode("utf-8"))
...     else:
...         sys.stdout.write(repr(x))
...     sys.stdout.write("\n")

>>> sys.displayhook = my_display
>>> a
>>> 一