5

Python プログラミング言語を使用していますが、å、ä、ö などの文字を出力できません。次のコードでは、å ではなく疑問符 (?) が出力として表示されます。

#coding: iso-8859-1
input = "å"
print input

次のコードでは、ランダムなテキストを入力できます。for ループは、入力の各文字を処理し、それらを文字列変数 a に追加してから、結果の文字列を出力します。このコードは正しく機能します。å、ä、および ö を入力しても、出力は正しくなります。たとえば、"år" は期待どおり "år" を出力します。

#coding: iso-8859-1
input = raw_input("Test: ")
a = ""
for i in range(0, len(input)):
    a = a + input[i]
print a

興味深いのは、 に変更input = raw_input("Test: ")するとinput = "år"、「å」に疑問符 (?) が出力されることです。

#coding: iso-8859-1
input = "år"
a = ""
for i in range(0, len(input)):
     a = a + input[i]
print a

私は TextWrangler を使用しており、ドキュメントの文字エンコーディングは ISO Latin 1 に設定されています。何が原因でしょうか? どうすれば問題を解決できますか?

4

1 に答える 1

3

Python 2 を使用しています。Linux などのプラットフォームで I/O を UTF-8 でエンコードすると仮定します。

Python 2 の""リテラルはバイト文字列を表します。したがって"år"、ISO 8859-1 でエンコードされたソース ファイルで指定すると、変数inputの値は になりますb'\xe5r'。これをprint行うと、未加工のバイトがコンソールに出力されますが、有効な UTF-8 ではないため、疑問符として表示されます。

実証するには、print repr(a)代わりに を試してみてくださいprint a

を使用するraw_input()と、ユーザーの入力は既に UTF-8 でエンコードされているため、正しく出力されます。

これを修正するには、次のいずれかを行います。

  • 印刷する前に、文字列を UTF-8 としてエンコードします。

    print a.encode('utf-8')
    
  • u'text'バイト文字列の代わりにUnicode 文字列 ( ) を使用します。raw_input()Python 2 では、テキスト文字列ではなくバイト文字列が返されるため、入力のデコードには注意が必要です。入力が UTF-8 であることがわかっている場合は、 を使用しますraw_input().decode('utf-8')

  • ソース ファイルを iso-8859-1 ではなく UTF-8 でエンコードします。その場合、バイト文字列リテラルは既に UTF-8 になっています。

于 2013-11-09T21:42:28.833 に答える