将shift_jis转换为utf-8
我有一堆用shift_jis编码的文本文件,我想把它们转换成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)”这一行导致了程序崩溃。如果把这一行注释掉,程序就能正常运行。我不知道为什么会这样。这一行是怎么引起错误的呢?
1 个回答
4
你不能同时从同一个文件中读取和写入数据,这就是为什么你的代码不工作的原因。读取和写入的数据都是暂时存放在内存中的,而文件对象使用的是同一个文件指针,所以很难预测会发生什么。你要么把输出写到一个不同的文件,要么先把整个文件的内容读到内存中,然后关闭文件,再重新打开它并写回去。
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)