Форум сайта python.su
сенсация: :-D :-D Gtk + Utf8 + Unicode <- живут в дружбе и мире благодаря грязному Хаку?
рассказываю всё попорядку:
1. введение::
заметил что в Gtk-фреймворке в принцепе в основном используются байтовые строки (а не Unicode-строки)
….однако Unicode`ные строки тоже хорошо работают… (все Gtk-функции их свободно “понимают” )
тоесть оба варианта работают и официально щитаются корректными:
my_text_entry_1.set_text( b'байтовая строка' )
my_text_entry_2.set_text( u'юникодная строка' )
# даже в случае не-ascii символов в GTK-строке -- свободно извлекается юникодный объект:
unistr = unicode(my_text_entry.get_text()) # хотя ОБЫЧНО -- в Python-2 (в отличии от Python-3) это делать нельзя,
# без явного указания кодировки. (например xxxx.decode('UTF-8') )
unistr = u'внутри юникодной строки -- %s . вот так-то!' % b'байтовая строка'
btstr = b'внутри байтовой строки -- %s . вот так-то!' % u'юникодная строка'
# привет миру Python-3 -- где такое возможно "из-коробки" :-) , для любых программ
import sys
print sys.getdefaultencoding() # печатает: ascii
import gtk
print sys.getdefaultencoding() # печатает: utf-8
Офлайн
и вот ещё вопрос – как они реализовали этот “хак” ? ведь функция sys.setdefaultencoding(…) – не работает %) %)
былобы полезно заюзать этот хак и не в GTK-программах :-)
(GTK не изменяет указатель на функцию sys.getdefaultencoding .. – это проверял )
Отредактировано (Окт. 13, 2010 06:42:50)
Офлайн
tmp_a6367100
(GTK не изменяет указатель на функцию sys.getdefaultencoding .. – это проверял )
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> enc = sys.getdefaultencoding
>>> enc()
'ascii'
>>> import gtk
>>> enc()
'utf-8'
>>>
Офлайн
а вот в PySide – всё работает ЧЕСТНО на Юникодных объектах :-) :-)
….. .. но правда не совсем всё…
кой какие функции там через байтовые-строки сделаны:
вот например: PySide.QtUiTools.QUiLoader.load(path_as_bytes_str)
(хотя выглядет это больше как BUG , так как остальные функции внутри PySide.QtUiTools.QUiLoader опятьже-таки на Юникоде %) %) )
Офлайн