Конвертировать shift_jis в utf-8

У меня есть куча TXT-файлов, которые закодированы в 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 ответ

Решение

Вы не можете читать и писать из одного и того же файла одновременно, как это. Вот почему это не работает. Ввод и вывод буферизируются, и файловые объекты используют один и тот же файловый указатель, поэтому трудно предсказать, что произойдет. Вам нужно либо записать вывод в другой файл, либо прочитать весь файл в память, закрыть его, снова открыть и записать обратно.

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)
Другие вопросы по тегам