エラーメッセージは、Windowsのコマンドプロンプトで印刷する文と一致しません。これは、ascii
コーデックに既定ではありません。米国のWindowsでは、デフォルトでcp437
になります。
エンコードせずに、コンソールにUnicodeを印刷するだけで済みます。 Pythonは、Unicode文字列をコンソールエンコーディングにエンコードします。ここに例があります。 ソースファイルはUTF-8エンコーディングで保存され、エンコーディングは特別な#coding:utf8
コメントで宣言されています。これにより、任意のUnicode文字をソースコードに入れることができます。
#coding:utf8
s1 = u'αßΓπΣσµτ' # cp437-supported
s2 = u'ÀÁÂÃÄÅ' # cp1252-supported
s3 = u'我是美国人。' # unsupported by cp437 or cp1252.
cp437
に私の米国Windowsコンソールのデフォルト以来、唯一の
s1
は、エラーなしで表示されます。
C:\>chcp
Active code page: 437
C:\>py -2 -i test.py
>>> print s1
αßΓπΣσµτ
>>> print s2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <undefined>
>>> print s3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to <undefined>
エラーメッセージは、使用しようとしたエンコードを示します。cp437
。
私はコンソールのエンコーディングを変更した場合は、今s2
が正常に動作します:
C:\>chcp 1252
Active code page: 1252
C:\>py -2 -i test.py
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u03b1' in position 0: character maps to <undefined>
>>> print s2
ÀÁÂÃÄÅ
>>> print s3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to <undefined>
を今s3
は、一般的な西洋のエンコーディングがサポートされていない文字が含まれています。コントロールパネルに入り、システムロケールを中国語に変更すると、コンソールで中国語のエンコードがサポートされますが、より良い解決策は、すべてのUnicode文字をサポートするエンコードであるUTF-8をサポートするPython IDEを使用することです、またはコース)。要約すると
>>> print s1
αßΓπΣσµτ
>>> print s2
ÀÁÂÃÄÅ
>>> print s3
我是美国人。
、単にUnicode文字列を使用して、理想的にUTF-8を備えた端末を使用して、それが「ただ働き」になります。以下はPythonWinの出力、pywin32
Python拡張が付属していますエディタです。ファイル、ユーザー入力、ネットワークソケットなどから読み込んだテキストデータをUnicodeに変換します。ユニコードで処理して印刷しますが、プログラムを終了するときにエンコードします(ファイル、ネットワークソケットなどに書き込む)。
'type(i)とは何ですか?その可能性のある 'str'は' unicode'ではありませんが、説明上重要です。 – tdelaney
また、2回目の試行で同じエラーが発生しましたか、エンコードエラーではなくデコードエラーが発生しましたか? – tdelaney
'type(i)'は ' '、と私は同じ正確なエラーを両方の時間を得る –