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 个字节的文件(é 占用两个字节,但 Python 怎么知道它必须在那里读取 2 个字节?)

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

这给出了一个 6 字节的文件(そ 占用了 3 个字节,但是 Python 怎么知道它必须在那里读取 3 个字节?)

所以我可以理解 Unicode 需要两个字节,但有时是 1、2 或 3 个字节,我看不出它是如何工作的。

4

1 回答 1

4

默认情况下,它使用UTF-8编码写入输出文件,这是一种可变长度编码:它使用 1 个字节编码 ASCII 字符(代码点 U+0000-U+007F),代码点 U+0080-U +07FF(包括拉丁语 1 字符,例如 é)使用 2 个字节,码位 U+0800-U+FFFF(包括中文和日文字符,例如 そ)使用 3 个字节,码位 U+10000-U+ 10FFFF 使用 4 个字节。

如果你想使用不同的编码,比如 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 回答