Hello!

> ICU — это стрельба по воробьям межконтинентальной баллистической ракетой.
> Библиотека, первоначально написанная для Java и потом портированная для C++
> и C. Большинство функций вряд ли понадобятся (некоторые довольно
> экзотические, как например запись чисел словами на разных языках).

Не знал таких подробностей. Немного поковыряв, удалось ICU скомпилить с 
эскулайт под линукс и 
виндоус, теперь в рассылке эскулайт периодически подсказываю, как это делается, 
а сам мечтаю 
избавиться от такого балласта. Эскулайтом я постепенно в своих проектах 
постгрес заменяю, нужные 
расширения написал (не много и нужно, в сущности - работа с ip-адресами, md5 
суммы для текстовой 
строки, для строки таблицы и целой таблицы, сжатие/распаковка данных, генерация 
uuid и т.п.), пора 
бы и "отбросить хвост" в виде libicu. Кстати, разработчик ГИС-модуля к sqlite 
использует iconv для 
перекодирования. А вот полнотекстовый поиск работает с юникодом через ICU.

> Что имеется ввиду под поддержкой уникода? Обычно требуется только:
> 1) Унифицированное представление текста на разных языках. Обычно UCS2, UCS4
> или UTF-8. Иногда используют wchar_t и/или мультибайтовые строки.

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

Требуется ввод/вывод  - смотрел примеры перекодирования через iconv, вроде 
устраивает.
Далее, нужно сравнение символов, сортировка строк, смена регистра. 

Вот что требуется от функций смены регистра:

**     upper('ABC') -> 'abc'
**     lower('abc') -> 'ABC'

**     lower('I', 'en_us') -> 'i'
**     lower('I', 'tr_tr') -> 'ı' (small dotless i)

Сравнение с шаблоном, как я понимаю, через вышеперечисленное пишется, но 
хотелось бы пример, чтобы 
грамотно реализовать функции LIKE и REGEXP - они и так медленные, писать надо 
аккуратно.


> 2) Ввод/вывод в разных кодировках. Достаточно iconv или recode. Тикль и
> питон тащат свои таблицы перекодировки. Львиную долю тут занимают всякие
> китайские и японские кодировки, если очень жмёт, то можно сэкономить.

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

> 3) Определение класса символа (буква, цифра, пробел и т. п.),
> преобразование регистра. Для wchar_t есть стандартные локалезависимые
> функции в C99. Для уникода можно взять нетяжёлую libunicode.

Наверное, мне это и надо, если с этими функциями можно выполнить преобразования 
вида 
lower('I', 'en_us') -> 'i'

> 4) Чисто уникодные функции. Комбинированные символы, названия каждого
> символа и т. п. Тут уже нужна специальная библиотека. И немаленькая.

Названия символов в движке СУБД знать не требуется. А что такое 
"комбинированные символы"?

P.S. Есть кроссплатформенный способ реализации - забиндить нужные функции из 
тикля (питона, etc.). 
Но, во-первых, для сравнения символов такой метод получается медленнее раза в 2 
- 4, чем через 
libicu. Во-вторых, иногда нужно вызвать sqlite просто из консоли и хотелось бы 
иметь встроенные 
функции. 

Best regards, Alexey.


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

Ответить