1

私は Windows 7 を実行しており、そのコンソールは Consolas フォントを使用するように構成されているため、Unicode 出力の可能性があります。コンソールで Unicode を読み取る機能は、Far Manager などのプログラムで何度も証明されています。キリル文字とドイツ語の äöü 文字の両方を、エンコードの切り替えなしで同じ文字列の同じコンソールで読み取ることができます。

次にPythonについて。

私は一生懸命努力していますが、出力に Unicode が表示されません。デフォルトでは、stdout は ASCII とキリル文字以外の文字を出力できませんprint(sys.stdout.encoding)cp866

次の結果が得られます。

print("Ля-ля äöüÄÖÜß")

UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-12: character maps to <undefined>

print("Ля-ля äöüÄÖÜß".encode("utf-8"))

b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'

OK、PYTHONIOENCODINGバッチファイルに環境変数を設定しました:

SET PYTHONIOENCODING=UTF-8

そして得た:

print(sys.stdout.encoding)
UTF-8

print("Ля-ля äöüÄÖÜß")
╨Ы╤П-╨╗╤П ├д├╢├╝├Д├Ц├Ь├Я

print("Ля-ля äöüÄÖÜß".encode("utf-8"))`
b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'

何をすべきか?

4

1 に答える 1

4

実際には、Python と Windows コンソールの間の相互作用にちょっとしたバグがあります ( http://bugs.python.org/issue1602を参照)。ReadConsole と WriteConsole の代わりに、C 関数 ReadConsoleW と WriteConsoleW を使用して、Windows コンソールで Unicode を読み書きすることができます。したがって、機能しているように見える解決策の 1 つは、ctypes を介して ReadConsoleW、WriteConsoleW を呼び出して、独自の stdout および stdin オブジェクトを作成することです。出力ではこれは機能しますが、入力では、Python 対話型インタープリターが実際には入力を取得するために sys.stdin を使用しないという問題があります (ただし、input() 関数の呼び出しは機能します) - http://bugs.python.org/issue17620を参照してください。

多くの人が、Windows コンソールに問題があると言っています。ただし、実際には Unicode 文字を (適切なキーボード レイアウトがあれば) 問題なく入力できます。これらは問題なく表示されます。「∫.py」という名前のファイルをいくつかの Unicode 引数で実行することもできます。これは正しく実行され、引数は sys.argv 文字列で正しく待機しています。

更新:これらの問題に対処するために Python パッケージを作成しました。https://github.com/Drekin/win-unicode-consoleおよびhttps://pypi.python.org/pypi/win_unicode_consoleを参照してください。によってインストールしpip install win_unicode_consoleます。少なくとも、Python 3.4、Python 3.5、および Python 2.7 で動作します。

于 2013-07-27T18:43:46.780 に答える