Re: Возможна ли поддержка тиклем юникода?
Hello!
> Удаление акцента, как и преобразование регистра, и т.п. производится над
> строкой символов уникода. А UTF-8 — всего лишь представление этой строки в
> виде последовательности байт.
Извиняюсь за некорректное использование терминов, сейчас вроде понятнее становится, попробую
переформулировать вопрос.
Если входные данные в представлении UTF-8, логично использовать функции именно для этого
представления. Но почему-то функции вижу только для UTF-16 (библиотека ubaccent) и UTF32 (система).
Зачем этот зоопарк и как с ним жить?
> > Библиотека unaccent работает, но
> > как-то странно - обязательно делает перекодировку даже для utf-16be (при
> > вызове unac_string_utf16 почему-то заглавная буква Ё превращается в
> > непонятный значок, а unac_string с указанием кодировки возвращает
> > корректный результат), хотя по документации не должна, и я никак не могу
> > понять, можно ли ее использовать для работы с utf8 представлением.
>
> В документации ошибка, UTF-16 следует читать как UTF-16BE, и
> unac_string_utf16 работает именно с UTF-16BE. Вообще же код достаточно
> грязный, библиотека может не работать на экзотических платформах, а утилита
> unaccent не работает с некоторыми данными и на обычных. С UTF-8 особых
> проблем не будет.
Про UTF-16BE я уже понял, но вот буква Ё пропадает. А если через iconv передавать, все ок. А
какая-то библиотека лучше этой есть в системе? Если у буквы "ё" не убирать акцент, она не желает
сортироваться и попадает после буквы "я" (для локале-зависимых функций такое поведение непонятно, а
все системные функции должны быть локале-зависимыми).
> > wcsncasecmp для utf16 не проверял, может быть и работает...
>
> wcsncasecmp работает не с utf16, а со строкой широких символов wchar_t.
Можно на примере пояснить? Есть две строки utf8 в формате multibyte string, как я понимаю. Пока что
я вижу только вариант с преобразованием этих строк в wide-character strings с помощью mbstowcs() и
далее сравнением функцией wcsncasecmp/wcsncmp. Как сделать "в один ход" сравнение multibyte строк
(символов)? В примерах, что я видел, разработчики таскают с собой таблицы для сравнения юникодных
символов, зато могут работать с многобайтовыми строками, не занимаясь бесконечными
преобразованиями.
Best regards, Alexey.
Reply to: