LINUX.ORG.RU

Как заставить Glib2 не выеживаться и выдавать текст в локальной кодировке?


0

0

Сейчас он выдает текст в своей внутренней utf8 кодировке, а на локаль ему плевать. В качестве костылей имеется куча функций вида g_locale_from_utf8, но на каждый чих делать явное конвертирование ввода из пользовательского интерфейса в локальную кодировку - это нечто уже запредельное.

Есть ли в этой куче навоза под названием GTK2 функция, которая заставляет gtk использовать ЛОКАЛЬ при выдаче текста из любого виджета?


что имеется ввиду под "выдает"?

вывод в stdout, копирование в буфер обмена, еще что-нибудь?


fghj ★★★★★
()
Ответ на: комментарий от fghj

Просто получить программно текст из любого виджета.
Типа пользователь вбил в gtkEntry текст "Привет!".
gtkEntryGetText при этом выдает какую-то дрянь типа "п я п п п я!" (локаль ru_RU.KOI8-R), которая приводится к нормальному виду конвертированием с помощью функции g_locale_from_utf8.

geekkoo
() автор топика
Ответ на: комментарий от geekkoo

А вот хрен - низзя, оно просто вываливает наружу плохопереваренное внутренне представление:

G_CONST_RETURN gchar*
gtk_entry_get_text (GtkEntry *entry)
{
g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL);

return entry->text;
}


Какой же это аццтой ;(

tk/tcl - наше всё!

geekkoo
() автор топика
Ответ на: комментарий от anonymous

>>Там те же проблемы.

Нет там проблем. Внутренняя кодировка utf, но наружу по-умолчанию выдается конвертированный в локаль текст.

man n encoding
encoding system ?encoding?
Set the system encoding to encoding. If encoding is omitted then
the command returns the current system encoding. The system
encoding is used whenever Tcl passes strings to system calls

$wish
% set te "привет"
привет
% set te
привет
%

geekkoo
() автор топика

Gtk2, как и любой другой вменяемый фреймворк начала 21-го века, работает с Unicode throughout. Просто потому, что не может он тебе гарантированно выдать именно то, что юзер напечатал в том текстбоксе, если у тебя KOI8-R. Вообще, по нынешним меркам, гуевая софтина, не работающая полностью с юникодом - это сломанная софтина.

Если тебе где-то нужна строка в локальной кодировке (но, а зачем, собственно?), то используй функции преобразования.

Касательно Tcl/Tk - насколько я помню, там все строки в юникоде, не только виджеты. Просто при выводе на консоль оно автоматом делает преобразование для данной локали.

int19h ★★★★
()
Ответ на: комментарий от int19h

>>как и любой другой вменяемый фреймворк начала 21-го века,

Когда я слышу слово фреймворк - я хватаюсь за карман и делаю ноги. Обязательно обуют ;)

Gtk1.2 был нормальным тулкитом для разработки морд, где описанных выше проблем не было (gtk_entry_get_text выдавало то, что надо). Теперь оно не работает и оправдывается тем, что оно, видите ли, фреймворк, а не хухры-мухры.

geekkoo
() автор топика
Ответ на: комментарий от geekkoo

>gtkEntryGetText при этом выдает какую-то дрянь типа "п я п п п я!"

с чего вы решили что он выдает какую-то дрянь, мне кажется он выдает
"Привет!"?

fghj ★★★★★
()
Ответ на: комментарий от geekkoo

> Нет там проблем. Внутренняя кодировка utf, но наружу по-умолчанию выдается конвертированный в локаль текст.

Плевать, что оно выдает наружу. Нельзя указать кодировку для самого тескта программы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.