рассказываю всё попорядку:
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') )
и праграммист должен ТОЧНО (на 100%) ЗНАТЬ – какая конкретно кодировка имеется ввиду.
например для кодирования НАЗВАНИЯ файлов используется одна кодировка, а для кодированиях СОДЕРЖАНИЯ файлов – другая кодировка . для кодирования символов ТЕРМИНАЛА используется третья кодировка .. вобщем – для каждой сущности в операционной системе – как правило существует своя кодировка… некоторые кодировки в различных операционных системах повторяются (например кодировка не-юникодного GUI в Windows совпадает с кодировкой содержимого текстовых файлов (но эта кодировка отличается от кодировки имён файлов и кодировки терминала) .. в других операционных системах схожести и различия могут быть другие…
…так-что каждый программист который пишет кросплатформенную программу должен везде (для каждой сущности) – использовать специальную кодировку название которой – извлекается через ту-или-иную _соответствующщую_ спец-функцию (а не вбивается через исходный код) .
[[[]]]
но если GTK не требует указывать кодировку для своих Виджетов при оперировании Юникодными объектами – то значит с программиста сподает очередная головная боль .. программисту не придётся задумываться над вопросом: “а верно ли я понимаю какую я должен использовать кодировку для GTK-виджетов”
3. необычность выходит за рамки Gtk::
оказывается что в Gtk программах рабтает даже ЭТО(!!!):
unistr = u'внутри юникодной строки -- %s . вот так-то!' % b'байтовая строка'
btstr = b'внутри байтовой строки -- %s . вот так-то!' % u'юникодная строка'
# привет миру Python-3 -- где такое возможно "из-коробки" :-) , для любых программ
4. а вот тут – хак таки-пойман с поличным::
простая Пайтон-программа из четырйх строчек:
import sys
print sys.getdefaultencoding() # печатает: ascii
import gtk
print sys.getdefaultencoding() # печатает: utf-8
5. эпилог::
что думаете про всё это?