Найти - Пользователи
Полная версия: Странная проблема с кодировкой и кирилиическими символами
Начало » Python для новичков » Странная проблема с кодировкой и кирилиическими символами
1
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)
Dimitor
Попробуй оформить строки как юникодные
            ui.text(u"{=txt}Экипировано:\n%s"%eva.__dict__[slot].id) # <---  u"........
sypper-pit
Dimitor
верно самый простой способ :)

Eliont
Ты из БД данные берёшь ? Проверь свой питон , больше информации можно :) …
Eliont
Спасибо за совет, но не помогло.

Попробовал кодировать ини-файл в utf, дак он даже не грузится - парсер инишников матерится что не может найти заголовок секции. В ansi читает нормально.
MissingSectionHeaderError: File contains no section headers.
file: db/weapon_2.ini, line: 1
'\xef\xbb\xbf[knife_1]\n'
o7412369815963
можешь выложить исходник который мы сможем у себя запустить?
а то сейчас не понятно то ли в коде косяк, то ли модуль ui кривой.
Eliont
Всю игру что ли?
Хотя в принципе можно, несколько доделаю и выложу.

ui кривой очень врядли, его писал не я, он принадлежит движку RenPy.
Eliont
Вроде разобрался.
Считанная кириллическая строка хранится по всей видимости в виде юникод-строки с шестнадцатеричным представлением, и при её выводе не напрямую а через ссылку-посредник (я думал метод копирует весь обьект, а оказалось только ссылку) какой-то символ из строки наверно терялся или преобразовывался, вот и получалось что 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