команда zip на Centos не сохраняет французские специальные символы - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть бродячая машина с Centos, которая более или менее идентична среде prod, над которой я работаю. Я только что столкнулся с различием в том, как файлы упаковываются с помощью команды zip в vagrant по сравнению с той же командой в той же папке в производственной среде. Папка, которая должна быть упакована командой zip -r archive.zip "Target Folder", содержит некоторые файлы PDF, имена которых содержат французские специальные символы, такие как é или à. Выполнение команды из prod работает просто отлично, но на моей виртуальной машине все эти неизвестные символы преобразуются в буквы T внутри архива, также в распакованной папке. Любые предложения, какие настройки я должен проверить, чтобы изменить это поведение?

1 Ответ

0 голосов
/ 21 февраля 2020

Давайте начнем с программ zip & unzip. Существует несколько возможных сценариев ios

  1. Имена файлов в zip-архиве вообще не сохраняют французские специальные символы.
  2. Имена файлов сохраняются правильно, но Программа unzip не знает, как обращаться с французскими специальными символами.

Первое, что нужно проверить, это то, что сборка zip на обеих машинах поддерживает Unicode. Если вы не видите строку UNICODE_SUPPORT, это проблема.

$ zip -v
...
Zip special compilation options:
    USE_EF_UT_TIME       (store Universal Time)
    SYMLINK_SUPPORT      (symbolic links supported)
    LARGE_FILE_SUPPORT   (can read and write large files on file system)
    ZIP64_SUPPORT        (use Zip64 to store large files in archives)
    UNICODE_SUPPORT      (store and read UTF-8 Unicode paths)
    STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
    UIDGID_NOT_16BIT     (old Unix 16-bit UID/GID extra field not used)
    [encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)

Теперь выполните ту же команду с unzip. Опять же, если вы не видите строку UNICODE_SUPPORT, это проблема.

Если программы zip & unzuip на обоих полях полностью поддерживают Unicode, проблема, вероятно, будет языковой постановка на ящики. Начните с запуска команды locale. Вам нужно увидеть UTF-8

$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8

Если проблема именно в этом, то я ожидаю, что в окне, поддерживающем французские символы, будет UTF-8 в переменных LC_ и другие. коробка не должна иметь UTF-8.

...