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

时间:2016-09-05 20:07:55

标签: python-3.5

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

file = open('txt.txt', 'w')
while 1:
    file.write('colour')

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

为什么会这样?

2 个答案:

答案 0 :(得分:0)

我相信您的编码设置为不合适的默认设置(可能在安装时或根据您的计算机设置)

您可以通过以下方式进行更改:

import sys
reload(sys)  # Reload does the trick!
sys.setdefaultencoding('UTF8')

查看此主题以获取更多信息 Changing default encoding of Python?

答案 1 :(得分:0)

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

63 CF 6C 6F 75 72  63 CF 6C 6F 75 72 ...

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

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

>>> original = 'colour' * 100
>>> original.encode('utf-8').decode('utf-16')
\u6f63\u6f6c\u7275\... # repeating

这些代码点对应于潣,潬和牵引,这与记事本显示的内容相同。所以问题是记事本错误地将你的字节解码为utf-16而不是utf-8。这让人联想到旧的Bush hid the facts错误。