Python での Unicode (UTF-8) ファイル I/O
Python では、ファイル内の Unicode テキストの処理にはエンコードとデコードの操作が含まれます。ただし、一般的な問題に例示されるように、これらの概念を理解するのは難しい場合があります:
デコードの混乱:
Python 2.4 の次のコードを考えてみましょう:
<code class="python">ss = u'Capit\xe1n' ss8 = ss.encode('utf8') print(ss, ss8)</code>
このコードの出力:
Capit\xe1n b'Capit\xc3\xa1n'
a 鋭文字 (á) は、Unicode (u'Capitxe1n') と UTF-8 (ss8 = 'Capitxc3xa1n') では異なって表されます。 ss8 を出力する場合、Python はデフォルトで ASCII 表現を使用するため、xc3xa1n シーケンスになります。
ファイル 'f1' を書き込みモードで開き、それに ss8 を書き込むと、'Capitxc3xa1nn' がファイルに書き込まれます。逆に、SS を別のファイル 'f2' に書き込む場合、Python は a-acute 文字をエスケープ シーケンスとして解釈しようとします。その結果、'Capitxc3xa1nn' が生成されます。
デコード ソリューション:
この混乱を解決するには、ファイルを開くときにエンコーディングを明示的に指定します。 Python 2.6 以降では、io.open 関数を使用できます。
<code class="python">import io f = io.open("test", mode="r", encoding="utf-8")</code>
このアプローチにより、ファイルは確実に UTF-8 で読み書きされ、手動でのエンコードとデコードの必要がなくなります。 Python 3.x では、io.open 関数は組み込み open 関数のエイリアスであり、エンコーディング引数もサポートしています。
代わりに、コーデック モジュールを使用することもできます。
<code class="python">import codecs f = codecs.open("test", "r", "utf-8")</code>
codecs.open を使用するときに read() メソッドと readline() メソッドを混在させると問題が発生する可能性があることに注意することが重要です。
以上がPython で Unicode (UTF-8) ファイルを正しく読み書きするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。