1

Pythonがファイル内のUnicodeをどのように処理するかを把握できません...

f = open('test.txt', 'w')
f.write('abc')
f.close()

これにより、3バイトのファイルが作成されます。

f = open('test.txt', 'w')
f.write('abcé')
f.close()

これにより、5バイトのファイルが作成されます(éは2バイトを使用しますが、Pythonはそこで2バイトを読み取る必要があることをどのように認識しますか?)

f = open('test.txt', 'w')
f.write('abcそ')  # a Japanese character
f.close()

これにより、6バイトのファイルが作成されます(そは3バイトを使用しますが、Pythonはそこで3バイトを読み取る必要があることをどのように認識しますか?)

したがって、Unicodeは2バイトかかることは理解できますが、1バイト、2バイト、または3バイトになることもあり、どのように機能するかわかりません。

4

1 に答える 1

4

デフォルトでは、可変長エンコーディングであるUTF-8のエンコーディングで出力ファイルを書き込みます。1バイトのコードポイントU + 0080-Uを使用してASCII文字(コードポイントU + 0000-U + 007F)をエンコードします。 + 07FF(éなどのラテン1文字を含む)は2バイトを使用し、コードポイントU + 0800-U + FFFF(そなどの中国語と日本語の文字を含む)は3バイトを使用し、コードポイントU + 10000-U + 4バイトを使用する10FFFF。

UTF-16などの別のエンコーディングを使用する場合は、次を使用str.encodeして目的のエンコーディングを使用できます。

# Save the string as UTF-16 little-endian
f = open('test.txt', 'w')
f.write(u'abcそ'.encode('utf-16le')  # Output will be 8 bytes
f.close()
于 2012-07-12T20:00:11.023 に答える