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

Re: Возможна ли поддержка тиклем юникода?



Hello!

> Почему бы не сделать две реализации и не сравнить простоту и эффективность?
> Sqlite3, как я вижу, предоставляет одинаковый интерфейс независимо от
> внутреннего представления, прозрачно перекодируя на лету. Выбор зависит от
> того, какое представление чаще используется.

Видимо, так и придется. Раньше и в голову не приходило, что в работе с юникодом столько проблем и 
неувязок и в линуксе нет набора нужных функций, а каждая библиотека есть отдельный велосипед. Как я 
посмотрел, libicu тоже через одно место работает - поиск и сравнение делаются для utf8, а 
преобразование регистра в utf16, понятно теперь, почему использование этой либы вчетверо снижает 
скорость работы SQLite.

> Главные потери будут не на саму перекодировку, а на динамическое выделение
> буфферов при каждом преобразовании (unac_string делает это, в отличие от
> unac_string_utf16).

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

> > Уверен, поскольку могу указать явно, в каком формате мне нужны данные -
> > sqlite3_value_text16, sqlite3_value_text16be, sqlite3_value_text16le,
> > sqlite3_value_text (последняя функция вернет utf-8). Вызов unac_string
> > работает корректно, а unac_string_utf16 "ломает" данные.
>
> Для unac_string_utf16 данные должны быть получены sqlite3_value_text16be, а
> не sqlite3_value_text16.

А в определяемом платформой формате be/le никак нельзя?! Ой не нравится мне такой подход.

> > Да, так оно и сделано по умолчанию, но мне нужно сортировать по алфавиту
> > (игнорируя акценты у "ё" и "й"), делать регистронезависимый поиск и
> > приведение регистра. Впрочем, без учета системной локали это делается "в
> > лоб" с помощью таблиц символов.
>
> Всё не так просто. См. http://www.unicode.org/reports/tr10/

Полную реализацию самому не сделать, а готовых инструментов приемлемого качества не видно. 
Интересует именно "приемлемая" реализация, но зато быстрая. В сложных случаях можно на уровне 
приложения назначать функции сортировки/преобразования, но это медленно.

Best regards, Alexey.


Reply to: