Python - file.write() 导致中文文本

Mar*_* W. 5 python-3.5

当我在无限循环中将某个字符串写入文件时,例如:

file = open('txt.txt', 'w')
while 1:
    file.write('colour')
Run Code Online (Sandbox Code Playgroud)

它给了我所有这些中文文本: 图片

为什么会发生这种情况?

Tre*_*eld 1

colour您可以通过在记事本中复制粘贴多次然后保存并重新加载文件来获得相同的结果。你的 python 代码没有任何问题。写入文件的字节将如下所示(以十六进制表示):

\n\n
63 CF 6C 6F 75 72  63 CF 6C 6F 75 72 ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

当记事本读取这些字节时,它需要猜测它们代表什么。理想情况下,它将文本解码为 utf-8 或 ascii。相反,它会看到字节中的模式并猜测错误。

\n\n

我注意到每一对字节对应一个汉字。这表明编码可能是 utf-16。以下 python 测试证实了这种情况:

\n\n
>>> original = \'colour\' * 100\n>>> original.encode(\'utf-8\').decode(\'utf-16\')\n\\u6f63\\u6f6c\\u7275\\... # repeating\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些代码点对应于 \xe6\xbd\xa3、\xe6\xbd\xac 和 \xe7\x89\xb5,这与记事本显示的内容相同。所以问题是记事本错误地将您的字节解码为 utf-16 而不是 utf-8。这让人想起老布什隐瞒事实的bug。

\n