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. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org