Недавно наткнулся на одну странную вещь. Вряд ли бы разобрался с ней, если бы раньше не встречал. С недавних времён Claw обновляется с помощью отличной утилиты rsync. Эта штука сама синхронизирует обе директории с файлами билда проекта с моего ноута на удалённый сервер. Но вот проблема. URL'ы некоторых файлов не могли правильно разрешиться. В частности так было со скриншотом для Counter. Его файл назывался "Counter - 110 посещений.png". Обычный такой файл. На сайте показывалась иконка битой ссылки на изображение. Думаю, вы могли видеть такие битые ссылки на Demoscene, они там часто появляются.
| Safari | Chrome | Ваш браузер |
|---|---|---|
Начал смотреть, в чём обстоит дело и сначала попробовал напрямую перейти по url этого файла. Когда первый раз открывал адрес, то получал ошибку. Но при перезагрузке страницы, ошибка исчезала и файл открывался. Очень странно, в чём же дело? Полез смотреть, как именно закодирован адрес этого файла.
Имя файла: Counter - 110 посещений.png
Его адрес: Counter%20-%20110%20%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B8%CC%86.png
Как вы знаете, не ASCII символы в URL адресах принято кодировать. Если перевести такой закодированный адрес назад, то можно понять, в чём была ошибка. Она была в букве й. Итак, с этой ошибкой мне уже не раз пришлось столкнуться, особенно она меня коробила, когда работал с Aseprite.
Не знаю, как в других системах, но macOS при сохранении файла, проводит для его имени NFD. Все составные символы раскладываются как простые плюс диакритический символ. В нашем языке таких символов четыре, это буквы Йй и Ёё. Вместо того, чтобы записать в операционной системе файл с этими буквами напрямую, эти символы разбиваются на два и иногда ломают редакторы и ссылки.
Unicode U+0308 ̈ COMBINING DIAERESIS
Unicode U+0306 ̆ COMBINING BREVE
Можете скопировать эти диакритические символы и попробовать вставить их в текст различных редакторов. Разные программы реагируют по-своему, кто-то комбинирует символ с предыдущим, кто-то оставляет как есть. Кстати, комбинация множества этих символов в одной букве или на одном слове называется Zalgo text.
C̲̱̣ȃ̑̍t̑a̱̲ly͡st̬̥
Касательно клешни, проблема была именно в этом. Ubuntu и macOS по разному хранили имя файла. Чтобы починить ошибку, надо было поменять ссылку на ровную, либо добавить в имя файла диакритический символ в конец. Тогда в операционной системе файл бы заканчивался не на й, а на и<0306>. Ровно таким и было первое временное решение проблемы. Но оно совершенно идиотское, потому что придётся тогда каждый раз смотреть и править все эти буквы вручную. Поэтому все файлы вложений были изменены на новый формат. Теперь вместо красивых русских имён будут url safe строки. Всё маленькими буквами, на английском языке и с тремя минусами в качестве разделителя темы. А все сложные символы теперь заменены словами:
Было: Counter - 110 посещений.png
Стало: counter---110-visits.png
Было: 100% - Карта позднего уровня
Стало: 100percent---map-of-the-endgame-level
Да, красоту упустили, но зато поисковые машины и браузеры будут рады. Именно эта причина, как я понимаю, и является ключевым объяснением факта, что многие приложения любят делать идиотские транслитерированные имена файлов и конечных точек. Сколько раз вам встречалось что-нибудь в стиле "otchet-po-practike-8" или "tachku-na-prokachku" вместо правильных имён? Увы, транслитерировать слово куда легче и быстрее, чем переписать или перевести (если мы говорим об автоматизации) на английский язык.
Что касается Aseprite, об этой ошибке я когда-то создавал issue. Но в целом состояние дела сейчас сильно лучше не стало. Разбитые диакритические символы не находятся в таблице пиксельного шрифта и заменяются на сглаженные. И ещё они сбивают высоту линии, делая её двойной.
