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

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



Alexey Pechnikov wrote:
> Хорошо известный кроссплатформенный способ добавить в программу поддержку
> юникода - использовать библиотеку libicu. С ней все работает, но... весит
> это счастье более 10 мегабайт. В то же время тикль, питон и проч.
> интерпретаторы имеют поддержку юникода, не используют эту либу и весят
> значительно меньше. Вопрос: как они это делают? Явно есть какое-то более
> легкое решение.
> 
> P.S. Собранный с поддержкой русского языка (с помощью libicu) tksqlite
> весит 9,1 Мб - и это упакованный в starpack. Ну, положим, в дебиане libicu
> можно с собой не таскать, но как это не печально, существуют и другие
> дистрибутивы и платформы.

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

Что имеется ввиду под поддержкой уникода? Обычно требуется только:
1) Унифицированное представление текста на разных языках. Обычно UCS2, UCS4
или UTF-8. Иногда используют wchar_t и/или мультибайтовые строки.
2) Ввод/вывод в разных кодировках. Достаточно iconv или recode. Тикль и
питон тащат свои таблицы перекодировки. Львиную долю тут занимают всякие
китайские и японские кодировки, если очень жмёт, то можно сэкономить.
3) Определение класса символа (буква, цифра, пробел и т. п.), преобразование
регистра. Для wchar_t есть стандартные локалезависимые функции в C99. Для
уникода можно взять нетяжёлую libunicode.
4) Чисто уникодные функции. Комбинированные символы, названия каждого
символа и т. п. Тут уже нужна специальная библиотека. И немаленькая.


Reply to: