[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: