12

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

4

1 に答える 1