将shift_jis转换为utf-8

时间:2014-08-05 08:51:58

标签: python utf-8 encode shift-jis

我有一堆在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)"导致程序崩溃。如果对此行进行注释,程序将无错误地运行。我不知道为什么会这样。它是如何导致错误的?

1 个答案:

答案 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)