Re: Как правильно сделать поддержку юникода в программе
Murat D. Kadirov -> debian-russian@lists.debian.org @ Wed, 31 Dec 2008 00:43:17 +0500:
>> > Хорошо известный кроссплатформенный способ добавить в программу
>> > поддержку юникода - использовать библиотеку libicu. С ней все
>> > работает, но... весит это счастье более 10 мегабайт.
>> apt-cache show говорит, что 6 (впрочем, тоже немало)
>>
>> > P.S. Собранный с поддержкой русского языка (с помощью libicu) tksqlite весит 9,1 Мб - и это
>> > упакованный в starpack. Ну, положим, в дебиане libicu можно с собой не таскать, но как это не
>> > печально, существуют и другие дистрибутивы и платформы.
>> А сказать, что, дескать, моя программа хочет libicu, и тогда в нужный дистриб
>> её положат, можно попробовать? Если твоя софтина окажется нужной и полезной,
>> вряд ли пакетирование libicu станет главной проблемой для дистрибутивов.
>>
>> З.Ы.
>> $ apt-cache rdepends libicu38 | sort | uniq | wc -l
>> 38
>>
>> Не так уж и мало.
MDK> Ничтожно мало. И в общем случае не согласен с предлагаемым тобой
MDK> решением проблемы путём: "ах у вас этого нету, ну дак это ваши же
MDK> проблемы". Любой мэйнтейнер (да собственно и внимательный юзер) сильно
MDK> скептически относится к тому, что необходимая утиль весит 200-300 кб, но
MDK> зато тянет за собой 10 метров зависимости (одной!), которые в сущности прямой
MDK> функциональности в программу не добавляет.
Программистский анекдот времен моей молодости:
- Но Ваша программа работает в 10 раз медленнее моей!
- Да, но зато она работает ПРАВИЛЬНО.
Насколько я знаю, что такое юникод, 10 мегабайт для ПРАВИЛЬНОЙ работы с
ним вполне может оказаться необходимым минимумом. Другое дело, если от
поддержки юникода нужно какое-то небольшое подмножество...
Сам, лично, на N800 ходил по граблям. В базу sqlite из питона пишется
слово, содержащее букву "й". Если кто не в курсе (вспоминая тут
дискуссию про "ё"), есть такая буква в русском языке. Читается оттуда
обратно почему-то композитный символ "и с акцентом". Хрен знает,
почему, но право имеет - нормализуются они в одно и то же (кажется, в
этот композитный и нормализуются, потому, наверное, так и возвращает).
А мне сравнить надо. Так вот, в итоге, чтобы сравнить, приходится
прогонять оба значения через функцию нормализации, и потом (сравнение
нужно case-insensitive) через уникодный то ли tolower, то ли toupper, не
помню. Это еще мне там точность сортировки пофигу и греческим я не
пользуюсь, и потому оно там справляется без указания языка (а язык там,
надо сказать, смешанный русский с английским, причем нередко в пределах
одной записи)...
Ну а в процессе ходьбы по оным граблям почитал некоторые документы на
тему, в частности, преобразования lower-upper-title case в уникоде... В
общем, желающие могут.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Штатными средствами среды я могу пририсовать "документу" оглавление,
обсуждение, усы и бороду
(c) Бо Беркгаут
Reply to: