Во время работы с коллегой я обнаружил странную проблему, которая, похоже, связана с кодированием. Мы работаем с некоторыми изображениями , которые имеют достаточно простые имена файлов , таких как city.gif
или wine.gif
, но как можно было бы ожидать , все становится более сложным при использовании специальных символов , таких как é
, ë
, à
. Мы также работаем с голландскими данными, в которых есть эти символы, например café
( паб ). (У нас нет контроля над происхождением файлов.) Здесь начинаются проблемы. Следующие имена файлов являются лишь примером. Эта проблема также возникает для других персонажей с диакритическими знаками.
café-2.png
cafetaria.png
café.png
На первом и последнем элементе должен быть акцентирован знак e (акцент aigu, é
). Вот как это показано в Linux (CentOS 6 и 7) в терминале при запуске ls
. Но здесь идет Windows! (Использование Windows 10, 64-разрядная версия.) При подключении к Windows через SSL с нашим сервером и последующем вызове ls
приведенный выше список выглядит следующим образом:
café-2.png
cafetaria.png
caf▒.png
Как вы можете видеть , надеюсь, первая линия до сих пор имеет ударение е é
, но третий один не делает. Вместо этого я вижу ▒
этот символ - который medium shade
в Unicode (9618 десятичных). Это странно само по себе. Однако, когда я соединяюсь через SFTP с Filezilla (все еще в Windows), я вижу это:
café-2.png
cafetaria.png
café.png
Так что теперь все é
изменилось : в первом все изменилось в последовательности, а в третьем все хорошо. Я обнаружил здесь, что это наиболее вероятно из-за преобразования Latin-1 <-> UTF-8, которое пошло не так, если я понял это правильно. Но это не может быть все, что происходит, верно?
Linux показывает все так, как мы ожидаем, Windows демонстрирует внешне противоречивое поведение в зависимости от того, как мы видим имя файла (SSH (putty) или SFTP (filezilla)). Есть ли способ «нормализовать» эти имена файлов - т.е. отредактировать их - и убедиться, что они все одинаковы в каждой ОС; или хотя бы непротиворечиво, и если да, то как? UTF-8
наша кодировка выбора.
Хотя это может быть просто эстетической проблемой, это не так. При попытке загрузить вещи через SFTP в Windows с нашего сервера Linux, я не могу загрузить файлы, имеющие проблему, упомянутую выше. Filezilla выдаст ошибку, такую как Can't download file café-2.png: café-2.png does not exist on the server
. Мне кажется, что Filezilla читает каталог и имя файла, интерпретирует его в некоторой кодировке, отправляет запрос GET на сервер с его интерпретацией, но эта интерпретация отличается от имени файла Linux, поэтому файл не найден.
В конечном итоге было бы неплохо, если бы было доступно решение, хотя меня также интересует, почему это происходит. Это происходит потому, что файлы изображений были созданы в разных операционных системах? Это происходит из-за того, что сервер Linux неправильно их интерпретирует, или из-за ошибки в Windows? Надеемся, что есть решение, в котором мы можем просто связаться с нашим системным администратором и попросить его включить переключатель в конфигурации сервера, но, боюсь, это не так просто.
python -c "import sys; print(repr(sys.argv[1]))" café-2.png
и python -c "import sys; print(repr(sys.argv[1]))" café.png
?