Hаболело, разобрался, набросал. Если у кого-то переодически возникают проблемы с кодировками в Python, этот пример решит ваши проблемы
| Код | # -*- coding: cp1251 -*- # (c) grock from Tkinter import * w = Tk()
def printw (*args) : global e zzz = '' stuff = u'' for i in args :# перебираем аргументы, исходя из кодировки делаем следующее: try:# не уникод zzz = unicode (i,'cp1251') stuff += zzz except:# уникод try: stuff += i except:# вообще не строка, какой-нибудь другой объект stuff += unicode (str(i),'cp1251') print '-->', stuff # ! можно даже сделать, чтобы программа все кодировки кушала !, продолжить except -ы
if args[len(args) - 1] != ',' : # если последний аргумент `,` не ставим перевод строки stuff += '\n'
try:# например можно вставить полученную строку в контрол e.insert (END, stuff ) except: pass
fl = file ('test_log.txt', 'a+') stuff = stuff.encode ( 'cp1251' )
if ord(stuff[0]) != 10 : fl.write (': '+ stuff + '\n') fl.close()
try: printw(u'сообщение 1') raise IOError, 'исключение'
except Exception, err:# исключения передают ссылку на ошибку, а не саму строку!!, причем это строка должна быть не в юникоде! # если вдруг она в юникоде надо делать преобразование # <строка в юникоде>.encode('cp1251') -- преобразует из юникода в обычную строку # в кодировке сp1251 printw (err) print err
w.mainloop()
|
|