我在Windows 8中的CMD,我已設置代碼頁65001(chcp 65001
)。我正在使用Python 2.7.2(ActivePython 2.7.2.5),並且已將PYTHONSTARTUP環境變量設置爲「bootstrap.py」。爲什麼在將Unicode寫入CMD時會出現IOErrors? (與代碼頁65001)
bootstrap.py:
import codecs
codecs.register(
lambda name: name == 'cp65001' and codecs.lookup('UTF-8') or None
)
這讓我打印的ASCII:
>>> print 'hello'
hello
>>> print u'hello'
hello
但我得到的,當我嘗試打印Unicode字符串與非ASCII字符的錯誤是沒有感覺到我。在這裏,我嘗試打印包含北歐符號弦數(我加入了版畫的可讀性之間的額外換行符):
>>> 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?
這是一個惡夢的情況。在SO和其他地方已經討論了這麼多次。例如:http://www.google.com/search?q=print+unicode+windows+console+python –
最簡單的解決方案是使用Python 3.3,如果可以的話。它有一個[cp65001編解碼器](http://docs.python.org/3/whatsnew/3.3.html#codecs)。 – eryksun
@PiotrDobrogost:如果你能找到它,請參考另一個案例(而且我不**意味着Unicode解碼錯誤!) – Hubro