Re: Как правильно сделать поддержку юник ода в программе

2009-01-22 Пенетрантность Artem Chuprina
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: r...@jabber.ran.pp.ru

Штатными средствами среды я могу пририсовать документу оглавление,
обсуждение, усы и бороду
(c) Бо Беркгаут


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: Как правильно сделать поддержку юник ода в программе

2009-01-22 Пенетрантность Artem Chuprina
Victor Wagner - debian-russian@lists.debian.org  @ Tue, 30 Dec 2008 23:05:26 
+0300:

  Хорошо известный кроссплатформенный способ добавить в программу
  поддержку юникода - использовать библиотеку libicu. С ней все
  работает, но... весит это счастье более 10 мегабайт. В то же время
  тикль, питон и проч. интерпретаторы имеют поддержку юникода, не
  используют эту либу и весят значительно меньше. Вопрос: как они это
  делают? Явно есть какое-то более легкое решение.

 VW Чего не хватает в glibc? В linux туда iconv входит, а функции
 VW работы с wide char и multibyte прекрасно поддерживают все
 VW необходимые операции с unicode.

Витус, насчет _всех_ необходимых - это ты, прямо скажем, загнул...
_Остро необходимый минимум_ еще может быть...

-- 
Artem Chuprina
RFC2822: ran{}ran.pp.ru Jabber: r...@jabber.ran.pp.ru

Historically, languages designed for other people to use have been
bad: Cobol, PL/I, Pascal, Ada, C++. The good languages have been those
that were designed for their own creators: C, Perl, Smalltalk, Lisp.
 -- Paul Graham


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: Как правильно сделать поддержку юник ода в программе

2009-01-05 Пенетрантность Aleksey Cheusov

 Попробую конкретизировать. Итак, юникод - UTF-8. Хотелось бы еще
 UTF16,
Ужас.

 хотя я ни разу его не использовал и не видел, чтобы кто-то
 использовал. Но движок sqlite имеет нативную поддержку UTF16, может
 пригодиться.

 Требуется ввод/вывод - смотрел примеры перекодирования через iconv,
wchar_t функций из libc достаточно, например, fgetws, getwc etc.
Но они все locale зависимые.

 вроде устраивает.  Далее, нужно сравнение символов, сортировка строк,
http://en.wikipedia.org/wiki/Unicode_normalization
Оно тебе действительно нужно?
Я не в курсе, кто это делает.

-- 
Best regards, Aleksey Cheusov.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org