当我在无限循环中将某个字符串写入文件时,例如:
file = open('txt.txt', 'w')
while 1:
file.write('colour')
它给了我所有这些中文文本: Picture
为什么会这样?
答案 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错误。