Найти - Пользователи
Полная версия: Нужно перекодировать файл из одной кодировки в другую.
Начало » Python для новичков » Нужно перекодировать файл из одной кодировки в другую.
1
369_sfera_963
Привет!

При попытке чтения файла вылетает ошибка:
'utf-8' codec can't decode byte 0xef in position 26…

Решение этой пробемы я вижу в следующем.
Есть ряд файлов, которые нужно привести к кодировке utf-8, чтобы выполнить дальнейшую работу.

Пробовал несколько вариантов (нашел их здесь, на форуме). Вот один из них:

f = open("utf8.txt", "wb")
for line in open("cp1251.txt", "rb"):
    f.write(line.decode('utf8').encode('cp1251'))

Если есть другое решение данной проблемы, буду рад услышать ваши советы.
Если же нет, то помогите довести до ума мою идею…

Использую Python v3.2
py.user.next
369_sfera_963
Использую Python v3.2
в open() есть параметр encoding

чтобы перекодировать, нужно исходный файл открыть на чтение “r” в его кодировке, а файл назначения открыть на запись “w” в нужной кодировке
369_sfera_963
py.user.next
369_sfera_963
Использую Python v3.2
в open() есть параметр encoding

чтобы перекодировать, нужно исходный файл открыть на чтение “r” в его кодировке, а файл назначения открыть на запись “w” в нужной кодировке

Вы имеете ввиду модуль codecs?

А как можно определить исходую кодировку файла?
doza_and
369_sfera_963
Вы имеете ввиду модуль codecs?
Это в ветке питона 2.x используется codecs
369_sfera_963
А как можно определить исходую кодировку файла?
По симпатичности результата перекодирования. В общем случае исходную кодировку установить невозможно.
sp3
doza_and
По симпатичности результата перекодирования. В общем случае исходную кодировку установить невозможно.
http://pypi.python.org/pypi/chardet не панацея, но все же…
py.user.next
>>> with open('file.txt', 'r', encoding='utf-8') as fin, \
...      open('output.txt', 'w', encoding='cp1251') as fout:
...     fout.write(fin.read())
... 
6
>>>
[guest@localhost tmp]$ cat file.txt
абвг
[guest@localhost tmp]$ .hex file.txt
00000000 d0 b0 d0 b1 d0 b2 d0 b3 20 0a |........ .|
0000000a
[guest@localhost tmp]$ .hex output.txt
00000000 e0 e1 e2 e3 20 0a |.... .|
00000006
[guest@localhost tmp]$
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB