2

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

4

1 回答 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)
于 2014-08-05T09:11:32.920 回答