LINUX.ORG.RU

проблемы с автодополнением accented characters

 ,


0

1

Не уверен, что вопрос именно для десктопа.

Итак, имеем: нажитая файлопомойка на HFS+. Миграция данных на линукс и ext4, читаем данные собственно под линуксом.

Проблема: HFS+ хранит accented characters несвязанными, т. е. в имени файла, содержащем, например, «й» вместо этого символа будет пара «и» + Unicode Character 'COMBINING BREVE' (U+0306). То же самое, как я понимаю, происходит и для прочих огласовок.

Визуально это при отображении как всякими гуевыми фм, так и в консоли выглядит как один символ.

Итак, перекидываем данные, получаем несвязанные символы в ext4 - видно в ls | hexdump. Пытаемся сотворить что-нибудь в консоли с таким файлом - имеем автодополнение только до вышеуказанных символов. При попытке дальнейшего ввода «й» автодополнения не происходит, что с одной стороны логично, с другой стороны - при для лингвистически корректного сравнения двух строк их положено нормализовывать (т.е идет декомпозиция, удаление огласовок etc. - в приведенном примере 0306 был бы отфильтрован).

В общем, это баг или не баг? А если да - то чей? Или это решается какими-либо переменными класса LC_?

Т. е.: 1. Должен ли вязать подобные лигатуры в один символ hfsplus? (или что там ответственно за чтение hfs+) 2. Если нет - должен ли ext4 вязать лигатуры при записи в фс? 3. Если нет - должен ли ext4 вязать лигатуры при чтении из фс? 4. Если нет - должен ли bash нормализовывать строки при автокомплите?



Последнее исправление: dannie (всего исправлений: 2)

Тут ошибка в самой системе Unicode. Й – это НЕ составная буква. Закорючка над й не может быть присоедена к какой-либо другой букве и не имеет самостоятельного смыслового значения.

Deleted
()
Ответ на: комментарий от Deleted

Насколько крив стандарт Unicode, говорить можно долго. То, что в нем есть несуразицы - это понятно. В любом случае, для обработки текстов на естественных языках использование стандарта Unicode - всего лишь одна из фаз. BTW, я, честно говоря, не помню - мне казалось, что combining breve используется в каких-то европейских символах.

Но вопрос не об этом.

Так, как я описал, оно работать не должно :) Вопрос в том, на каком этапе это можно/нужно исправить.

PS: скрипт для переименования я сделал, но это очень локальное решение проблемы.

dannie
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.