Форум сайта python.su
Здравствуйте.
В одном месте русский текст считанный из ини-файла выводится нормально, а в другом игра крашится.
В чём различие никак не пойму.
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)
Офлайн
Попробуй оформить строки как юникодные
ui.text(u"{=txt}Экипировано:\n%s"%eva.__dict__[slot].id) # <--- u"........
Офлайн
Dimitor
верно самый простой способ :)
Eliont
Ты из БД данные берёшь ? Проверь свой питон , больше информации можно :) …
Офлайн
Спасибо за совет, но не помогло.
Попробовал кодировать ини-файл в utf, дак он даже не грузится - парсер инишников матерится что не может найти заголовок секции. В ansi читает нормально.
MissingSectionHeaderError: File contains no section headers.
file: db/weapon_2.ini, line: 1
'\xef\xbb\xbf[knife_1]\n'
Офлайн
можешь выложить исходник который мы сможем у себя запустить?
а то сейчас не понятно то ли в коде косяк, то ли модуль ui кривой.
Офлайн
Всю игру что ли?
Хотя в принципе можно, несколько доделаю и выложу.
ui кривой очень врядли, его писал не я, он принадлежит движку RenPy.
Отредактировано (Июнь 25, 2010 04:06:59)
Офлайн
Вроде разобрался.
Считанная кириллическая строка хранится по всей видимости в виде юникод-строки с шестнадцатеричным представлением, и при её выводе не напрямую а через ссылку-посредник (я думал метод копирует весь обьект, а оказалось только ссылку) какой-то символ из строки наверно терялся или преобразовывался, вот и получалось что ordinal not in range(128).
Офлайн