我在 Windows 8 的 CMD 上,我已将代码页设置为 65001 ( chcp 65001
)。我正在使用 Python 2.7.2 (ActivePython 2.7.2.5) 并将PYTHONSTARTUP环境变量设置为“bootstrap.py”。
引导程序.py:
import codecs
codecs.register(
lambda name: name == 'cp65001' and codecs.lookup('UTF-8') or None
)
这让我可以打印 ASCII:
>>> print 'hello'
hello
>>> print u'hello'
hello
但是当我尝试使用非 ASCII 字符打印 Unicode 字符串时遇到的错误对我来说毫无意义。在这里,我尝试打印一些包含北欧符号的字符串(为了便于阅读,我在打印之间添加了额外的换行符):
>>> print u'æøå'
��øåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory
>>> print u'åndalsnes'
��ndalsnes
>>> print u'åndalsnesæ'
��ndalsnesæTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'Øst'
��st
>>> print u'uØst'
uØstTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'ØstÆØÅæøå'
��stÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'_ØstÆØÅæøå'
_ØstÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
如您所见,它并不总是引发错误(甚至不会每次都引发相同的错误),并且北欧符号只是偶尔正确显示。
有人可以解释这种行为,或者至少帮我弄清楚如何正确地将 Unicode 打印到 CMD 吗?