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.
所示
问题:
我该怎么做才能使 Python 控制台正确打印出这些笔划?
一个相关问题: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
>>> 一
我在 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.
问题:
我该怎么做才能使 Python 控制台正确打印出这些笔划?
一个相关问题: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
>>> 一