私は 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 に正しく出力する方法を理解するのを手伝ってくれますか?