Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2010 15:54:31

zloyGamer
От:
Зарегистрирован: 2010-06-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

например есть файл(“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()



Офлайн

#2 Июнь 12, 2010 15:55:51

zloyGamer
От:
Зарегистрирован: 2010-06-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

всмысле есть ли стандартная функция перекодировки из одной кодовой страницы в другую?



Офлайн

#3 Июнь 12, 2010 17:07:47

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

Что за кодировка IBM866? Может быть cp866?
text.decode('cp866').encode('utf-8')
P.S. Научитись пользоваться поиском, хотябы по форуму.



Офлайн

#4 Июнь 13, 2010 16:43:15

zloyGamer
От:
Зарегистрирован: 2010-06-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

оп, спасибо эт то что надо, а можно без перевода в текущю кодировку(decode('cp866')) ? а сразу encode('utf-8') тока с указанием из какой кодировки
а то так получается, как я понял, что текст прогоняется по 2 раза, сначала из ‘cp866’ в кодировку по умолчанию а потом из неё в ‘utf-8’
жестко както..



Офлайн

#5 Июнь 13, 2010 22:06:12

zloyGamer
От:
Зарегистрирован: 2010-06-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

после нескольких запусков заметил что конвертация из 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, затем найти начало каждой строки/символа в этой строке,
затем найти конец строки с допустимым набором символов, затем вырезать её из исходной строки, перевести в нужную кодировку и потом то что получилось вернуть на место, - и тогда это будет самый бессмыссленный и беспощадный велосипеД, и я думаю это не вариант.

и я практически уверен что есть какаянить адекватная ф-я для обработки таких случаев, но гугл её скрывает, если кто знает подскажите



Отредактировано (Июнь 13, 2010 22:08:17)

Офлайн

#6 Июнь 13, 2010 22:37:11

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

храни все в utf-8, это самая правильная кодировка

Офлайн

#7 Июнь 13, 2010 23:09:56

zloyGamer
От:
Зарегистрирован: 2010-06-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

o7412369815963
храни все в utf-8, это самая правильная кодировка
отличный совет,
но что делать если это не мне решать, мне надо тока обработать получаемые файлеги с текстами в разных кодирофках,
а в питоне даже нет ф-ии которая могла бы перевести просто хотябы те данные которые соответствуют utf-8 в cp1251



Офлайн

#8 Июнь 14, 2010 09:25:05

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

zloyGamer
и я практически уверен что есть какаянить адекватная ф-я для обработки таких случаев, но гугл её скрывает, если кто знает подскажите
try:
s = s.decode("utf-8")
s = s.encode("cp1251")
except UnicodeDecodeError:
# кодировка значит не утф 8
pass



Офлайн

#9 Июнь 14, 2010 09:26:03

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

zloyGamer
а в питоне даже нет ф-ии которая могла бы перевести просто хотябы те данные которые соответствуют utf-8 в cp1251
Все есть, не надо что то утверждать, если ты этого не знаешь.
s=unicode(s,'cp866','ignore').encode('utf-8)
Используйте документацию, читайте книги!



Офлайн

#10 Июнь 20, 2010 15:50:50

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

decode как сделать перевод из одной кодировки в другую?

Здравствуйте. У меня по всей видимости, похожая проблема, только какая-то странная.
В одном месте русский текст считанный из ини-файла выводится нормально, а в другом игра крашится.
В чём различие никак не пойму.

        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)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version