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.


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

Ответить