Ключевые слова:charset, x, xfree86, 8-bit, locale, rus, window, font, fvwm, wm, (найти похожие документы)
From: Ivan Pascal <pascal@tsu.ru>
Newsgroups: fido7.ru.unix
Subject: Отображение заголовков (titles) на русском языке в оконных менеджерах
> Однако, желание покопать, что это было, у меня не пропало. А вот идей
> конструктивных нет. =((
Ну, я могу рассказать, тем более, что сам к этому руку приложил.
Но это все достаточно сложно и не очень интересно.
Заголовки передаются из прикладной программы в прогамму - window
manager.
С заголовками в ascii особых проблем нет, они просто передаются
как обычная строка (массив байтиков), а заголовки в национальных
кодировках надо передавать в каком-нибудь формате, который явно
подскажет WM - в какой кодировке эта строка (и каким фонтом ее
рисовать).
В иксах до недавнего времени было три таких формата
- STRING, просто строчка байтиков без указания кодировки. По иксовым
же стандартам, в таком формате можно передавать только ascii и latin1 -
"европейские латинские" буквы.
- COMPOUND TEXT (или CTEXT) - сложный формат, в котором специальными
esc-последовательностями обозначаются места перехода от одной кодировки
к другой
- еще один формат, где название кодировки передается в дополнительной
строчке. Но этот практически не используется, так как он не лучше CTEXT,
а для его использования все приложения должны знать как можно больше
названий национальных кодировок.
Не так давно добавился еще юникодный формат UTF-8.
До недавнего времени (да и до сих пор еще) многие программы, в том
числе и многие WM, или вообще писались без учета существования
многочисленных национальных кодировок, или имели их поддержку как
"опциональную", то есть ее надо выбирать явно при сборке.
То, что в этих приложениях русский показывался правильно,
обеспечивалось целым рядом "хаков", которые заставляли приложения
принимать koi8-r за latin1 и не пытаться для него использовать
навороченные форматы.
В данном случае это означало, что русские заголовки предавались
в простейшем формате STRING.
Постепенно, от версии к версии, в xfree это дело "причесывается".
По мере отлаживания механизма поддержки национальных кодировок,
старые "хаки" вычищаются.
Поэтому и обнаруживается, что некоторые программы (по крайней мере
в default'ной сборке) даже не пытаются использовать те механизмы,
что есть в иксах, и тупо считают все, что предаётся от приложения
к приложению, кодированым в ascii или latin1.
То, что вы наблюдали означает, что ...
- приложение, увидев, что заголовок в koi8-r, закодировало его в
CTEXT (в предыдущей версии, оно просто обманывалось "хаком" и
считало, что передает голимую латиницу).
- а вот fvwm2 даже не пытался проверить формат сообщения, считая,
что кроме STRING ничего другого быть не может. И не пытаясь
"расшифровать" заголовок, тупо выводил его. Вот ошметки esc-sequences
вы и наблюдали.
Переособрав fvwm, вы сделали его достаточно умным, чтобы
распознавать навороченные форматы и извлекать из них реальный текст
в нужной кодировке. Потому мусор и исчез.
Переособрав fvwm, вы сделали его достаточно умным, чтобы
распознавать навороченные форматы и извлекать из них реальный текст
в нужной кодировке. Потому мусор и исчез.