Python 2.6:写入文件时的Unicode问题
使用非常旧的Python版本(2.6),我在将数据写入文件时遇到了Unicode编码问题:Python 2.6:写入文件时的Unicode问题,python,python-2.7,unicode,python-2.6,Python,Python 2.7,Unicode,Python 2.6,使用非常旧的Python版本(2.6),我在将数据写入文件时遇到了Unicode编码问题: t = tempfile.NamedTemporaryFile(mode = "w+b") res = text.encode("UTF-8") t.write(res) print t.read() 在这个简单的示例中,text是一种类型。我将其转换为UTF-8编码的类型,并将其写入输出文件。但是,当我读入文件时,数据完全损坏,这表明发生了某种编码错误 对于Python的更高版本(Python2.7)
t = tempfile.NamedTemporaryFile(mode = "w+b")
res = text.encode("UTF-8")
t.write(res)
print t.read()
在这个简单的示例中,text
是一种
类型。我将其转换为UTF-8编码的
类型,并将其写入输出文件。但是,当我读入文件时,数据完全损坏,这表明发生了某种编码错误
对于Python的更高版本(Python2.7),这种方法非常有效。Python 2.6到底有什么不同之处导致了这个问题?当您向文件写入内容并从同一文件读取时,将读取文件结尾后的内容。在某些操作系统(windows)上,这会导致垃圾。您必须返回0才能再次读取该文件。我不确定这是否适用于python 2.6,但我最近不得不处理一个类似的问题,但我使用了类似的方法,它成功了 res=text.encode('utf-8','replace') 这应该可以做到,因为错误将被utf-8替换。我为我工作。在
repr(t.read())
之前添加t.seek(0)
(t.flush()
不会有伤害,尽管t.seek
应该足够了)。添加t.close()
。“导致此问题的Python 2.6到底有什么不同?”--尝试将文本
最小化(一个或两个Unicode代码点),例如,使用二进制搜索(text=text[:len(text)//2]等)或使用diff
,cmp
比较Python 2.7和Python 2.6的结果。