我有一堆在shift_jis中编码的txt文件,我想将它们转换为utf-8编码,以便特殊字符可以正常显示。之前可能已经提到过,但我似乎无法做到这一点。
更新:我更改了我的代码,因此它首先写入列表然后它将从列表中写入内容。
words = []
with codecs.open("dummy.txt", mode='r+', encoding='shiftjis') as file:
words = file.read()
file.seek(0)
for line in words:
file.write(line.encode('utf-8'))
但是现在我得到运行时错误,程序崩溃了。 经过进一步调查,似乎" file.seek(0)"导致程序崩溃。如果对此行进行注释,程序将无错误地运行。我不知道为什么会这样。它是如何导致错误的?
答案 0 :(得分:3)
您不能像这样同时从同一个文件中读取和写入。这就是为什么它不起作用的原因。输入和输出是缓冲的,文件对象共享相同的文件指针,因此很难预测会发生什么。您需要将输出写入不同的文件或将整个文件读入内存,关闭它,重新打开并将其写回。
with codecs.open("dummy.txt", mode='r', encoding='shiftjis') as file:
lines = file.read()
with codecs.open("dummy.txt", mode='w') as file:
for line in lines:
file.write(line)