Найти - Пользователи
Полная версия: decode как сделать перевод из одной кодировки в другую?
Начало » Python для новичков » decode как сделать перевод из одной кодировки в другую?
1 2
zloyGamer
например есть файл(“test1.txt”) в кодировке ibm866 надо перевести его в UTF-8
fr = open("test1.txt", "rb")
s = fr.read(1000)
fr.close()

s = s.decode("IBM866") # - подскажите тут функцию

fw = open("test2.txt", "wb")
fw.write(s)
fw.close()
zloyGamer
всмысле есть ли стандартная функция перекодировки из одной кодовой страницы в другую?
igor.kaist
Что за кодировка IBM866? Может быть cp866?
text.decode('cp866').encode('utf-8')
P.S. Научитись пользоваться поиском, хотябы по форуму.
zloyGamer
оп, спасибо эт то что надо, а можно без перевода в текущю кодировку(decode('cp866')) ? а сразу encode('utf-8') тока с указанием из какой кодировки
а то так получается, как я понял, что текст прогоняется по 2 раза, сначала из ‘cp866’ в кодировку по умолчанию а потом из неё в ‘utf-8’
жестко както..
zloyGamer
после нескольких запусков заметил что конвертация из utf-8 слетает,
при конвертации из utf-8 в cp1251 файлов вот такого содержания:
почему?
Ї®зҐ¬г?
зачто!?
например в этом скрипте:
fr = open("test1.txt", "rb")
s = fr.read(1000)
fr.close()

s = s.decode("utf-8") # в этой строке встает и выдает: UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data
s = s.encode("cp1251")

fw = open("test2.txt", "wb")
fw.write(s)
fw.close()
понятно что в файле именно 3 строчка в utf-8 а все остальное просто набор ненужных нам символов,
а функции decode получается (в случае с utf-8) надо подавать именно определенный набор символов тогда она будет отбратывать его нормально,

можно былобы конечно определить этот набор допустимых символов для utf-8, затем найти начало каждой строки/символа в этой строке,
затем найти конец строки с допустимым набором символов, затем вырезать её из исходной строки, перевести в нужную кодировку и потом то что получилось вернуть на место, - и тогда это будет самый бессмыссленный и беспощадный велосипеД, и я думаю это не вариант.

и я практически уверен что есть какаянить адекватная ф-я для обработки таких случаев, но гугл её скрывает, если кто знает подскажите
o7412369815963
храни все в utf-8, это самая правильная кодировка
zloyGamer
o7412369815963
храни все в utf-8, это самая правильная кодировка
отличный совет,
но что делать если это не мне решать, мне надо тока обработать получаемые файлеги с текстами в разных кодирофках,
а в питоне даже нет ф-ии которая могла бы перевести просто хотябы те данные которые соответствуют utf-8 в cp1251
sp3
zloyGamer
и я практически уверен что есть какаянить адекватная ф-я для обработки таких случаев, но гугл её скрывает, если кто знает подскажите
try:
s = s.decode("utf-8")
s = s.encode("cp1251")
except UnicodeDecodeError:
# кодировка значит не утф 8
pass
igor.kaist
zloyGamer
а в питоне даже нет ф-ии которая могла бы перевести просто хотябы те данные которые соответствуют utf-8 в cp1251
Все есть, не надо что то утверждать, если ты этого не знаешь.
s=unicode(s,'cp866','ignore').encode('utf-8)
Используйте документацию, читайте книги!
Eliont
Здравствуйте. У меня по всей видимости, похожая проблема, только какая-то странная.
В одном месте русский текст считанный из ини-файла выводится нормально, а в другом игра крашится.
В чём различие никак не пойму.

        slot = ui.interact()

ui.at(downright)
ui.frame(style='workshop_button')
if eva.__dict__[slot]:
ui.text("{=txt}Экипировано:\n%s"%eva.__dict__[slot].id) <--- тут слетает если писать name (кириллица), а не id(латиница)
else:
ui.text("{=txt}Экипировано:\nНичего")

ui.at(upright)
ui.vbox()
for key in weapon:
wp = weapon[key]
#if wp.slot is slot:
ui.textbutton("{=txt}%s"%wp.name,ui.returns(wp.id),style='workshop_button') <--- тут тот же самый name выводится нормально.
ui.textbutton("{=txt}Ничего",ui.returns(None),style='workshop_button')
ui.close()
result = ui.interact()
#if weapon.has_key(result):
eva.__dict__[slot] = weapon[result].copy()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 1: ordinal not in range(128)
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