Я считаю, что это распространенная проблема, когда речь идет о кодировке символов по умолчанию в Linux и Windows. Однако после того, как я обыскал в Интернете, у меня нет простого способа исправить это автоматически, и поэтому я собираюсь написать сценарий для этого.Имена файлов Windows отображают поврежденные символы в Linux
Вот сценарий:
Я создал некоторые файлы на системе Windows, некоторые, с не-английскими именами (китайский конкретно в моем случае). И я сжал их в zip-файл, используя 7-zip. После этого я загрузил zip-файл в Linux и извлекил файлы в системе Linux (Ubuntu 16.04 LTS) (программа архива по умолчанию). Насколько я уже догадался, все имена неанглийских файлов теперь отображаются как некоторые поврежденные символы! Сначала я думал, что это должно быть легко с convmv, но ...
Я пробовал convmv, и он говорит: «Пропуск, уже utf8». Ничего не изменилось.
А потом я решил написать инструмент с использованием Python для выполнения грязной работы, после некоторого тестирования я дошел до точки, где я не могу связать исходные имена файлов с поврежденными именами файлов (если только хэширование содержимого).
Вот пример. Настройка Я веб-сервер для просмотра списка имен файлов на Windows, и один файл, после того, как кодируется с «GBK» в питоне, отображаются как
u'j\u63a5\u53e3\u6587\u6863'
И я могу запросить имена файлов в моей системе Linux. Я могу создать файл напрямую с именем, как показано выше, и имя CORRECT. Я также могу кодировать строку gbk unicode для кодировки utf8 и создавать файл, это имя также ПРАВИЛЬНО. (Таким образом, я не могу делать их одновременно, так как они действительно одно и то же). Теперь, когда я прочитал имя файла, которое я извлек ранее, это должен быть тот же файл. НО имя файла полностью отличается как:
декодирование с utf8, это что-то вроде u'j \ u255c \ u2559 ... '. декодирование его с помощью gbk привело к исключению UnicodeDecodeError, и я также попытался декодировать его с помощью utf8, а затем закодировать с помощью gbk, но результат все еще есть что-то еще.
Чтобы обобщить это, я не могу проверить исходное имя файла путем его декодирования или кодирования после его извлечения в систему linux. Если я действительно хочу, чтобы программа выполняла эту работу, мне нужно либо переделать архив, возможно, с некоторыми вариантами кодирования, либо просто пойти со своим скриптом, но используя хэш хэш файла (например, md5 или sha1), чтобы определить его исходный файл имя в Windows.
У меня есть все шансы вывести исходное имя из сценария python в вышеприведенном случае, кроме сравнения содержимого файла между двумя системами?
Dupe других вопросов: http://stackoverflow.com/questions/9974779/using-unicode-characters-for-file-names-inside-a-zip-archive – selbie
Сделайте поиск в Интернете по «zip-файлу и файлам Unicode». Вы не первый, кто ударил это. – selbie
Нет такой вещи, как 'unicode gbk' –