Конвертировать 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)