18

私は WinXP 5.1.2600 で作業しており、中国語のピンインを含む Python アプリケーションを書いています。Python 3.0 に切り替えることで、それらの多くが解決されました。しかし、コンソール出力の print() 関数は、奇妙な理由で Unicode 対応ではありません。ここに小さなプログラムがあります。

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)

出力は次のとおりです(読みやすくするために山括弧を角括弧に変更しています):

    sys.stdout エンコーディングは「cp1252」です
    トレースバック (最新の呼び出しが最後):
      [モジュール] のファイル「TestPrintEncoding.py」、22 行目
        印刷 (str1)
      ファイル「C:\Python30\lib\io.py」、1491行目、書き込み中
        b = エンコーダー.エンコード
      ファイル「C:\Python30\lib\encodings\cp1252.py」、19 行目、エンコード
        戻り codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' コーデックは文字 '\u0101' をエンコードできません
    4 番目の位置: 文字は [undefined] にマップされます

ü = \xfc = 252 は上位 ASCII であるため問題ありません。しかし、ā = \u0101 は 8 ビットを超えています。

sys.stdout のエンコーディングを「utf-8」に変更する方法を知っている人はいますか? codecsドキュメントを正しく理解していれば、Python 3.0 はこのモジュールを使用しなくなったことに注意してください。


申し訳ありませんが、前文なしでプログラムを提供しました。与えられた 3 行の前は、次のように始まります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

残念ながら、「coding:」行で指定されたコーディングは、コンソール出力ではなく、ソース コードのコーディングです。しかし、あなたの考えをありがとう!

4

5 に答える 5

15

Windows コマンド プロンプト (cmd.exe) は、使用している Unicode 文字を表示できません。Python が内部的に正しい方法で処理していてもです。IDLE、Cygwin、または Unicode を正しく表示できる別のプログラムを使用する必要があります。

完全な説明については、このスレッドを参照してください: http://www.nabble.com/unable-to-print-Unicode-characters-in-Python-3-td21670662.html

于 2009-02-03T14:34:08.553 に答える
12

環境変数「PYTHONIOENCODING」を「utf_8」に変更してみてください。私は、この問題に関する私の試練についてのページを書きました。

于 2010-10-26T20:37:12.763 に答える
2

こちらの質問と回答をご覧ください。貴重な手がかりがいくつかあると思います。具体的にsetdefaultencodingは、sysモジュール内の だけでなく、おそらく使用すべきではないという事実にも注意してください。

于 2009-02-19T11:13:57.370 に答える