Во время работы с коллегой я обнаружил странную проблему, которая, похоже, связана с кодированием. Мы работаем с некоторыми изображениями , которые имеют достаточно простые имена файлов , таких как 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?