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