Страницы

Поиск по вопросам

пятница, 16 ноября 2018 г.

Проблема с буквой “Й” в UTF-8

Пытаюсь сравнить два файла, оба содержат список файлов/папок, один сделан на маке, другой на linux. diff показывает разницу где ее на первый взгляд нет. Перевод в hex режим показал что одна и та же буква (визуально это й) в одной системе сформировалась след. символом d0b9 а в другой d0b8. Может кто знает почему ? и как сравнивать в таком случае ?


Ответ

Буква "й" может быть кодирована в unicode двумя способами: как один символ - собственно, "й" (Cyrillic Small Letter Short I), и как два символа - "и" (Cyrillic Small Letter I) и Combining Breve ("шляпка"). Это может создавать определённые проблемы при сравнении и поиске текста.
Подробнее можно почитать в этой статье: Хабрахабр: «Й» вам не «и» краткое! О важности нормализации Unicode
В вашем случае можно файл с "разложенной" буквой "й" перед сравнением прогнать через sed с помощью следующей команды:
cat файл | sed "s/\xD0\xB8\xCC\x86/\xD0\xB9/g"
(предложено участником Mike)

Комментариев нет:

Отправить комментарий