유니코드 UTF-8을 사용하도록 압축 해제된 목록을 강제하는 방법

유니코드 UTF-8을 사용하도록 압축 해제된 목록을 강제하는 방법

압축

zip -r --symlinks ../a.zip a a.txt 
  adding: a/šáčžřŠÁČÝŘŽÚ§/ (stored 0%)

파일 이름은 유니코드 형식으로 올바르게 저장됩니다.

목록

unzip -l ../a.zip 
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  03-11-2021 14:40   a/s??a??c??z??r??S??A??C??Y??R??Z??U??§/

압축 해제 목록은 형편없는 문자를 인쇄합니다.

압축을 풀면 파일 이름이 올바르게 복구되므로 파일 이름은 유니코드로 zip에 올바르게 저장되지만 올바른 유니코드 문자로 zip 목록을 표시해야 합니다.

올바른 유니코드로 목록을 인쇄하려면 어떻게 해야 합니까? 이것이 쉘 설정과 관련이 있습니까?

로케일

LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

내 것은 MacOS 시스템입니다.

모두 시도해 보았으나 결과는 동일했습니다 :-(

LC_ALL=UTF-8 zip...
LC_ALL=UTF-8 unzip...

LANG =UTF-8 zip...
LANG =UTF-8 unzip...

또한 모든 언어 변형을 시도했습니다.

LANG=cs_CZ.UTF-8 unzip -l ../unzip.zip
LANG=en_US.UTF-8 unzip -l ../unzip.zip

이러한 모든 언어 변형이 나열되어 있지만 locale -a여전히 잘못된 출력이 생성됩니다. :-(

bsdtar로케일 설정 없이도 작동합니다.

bsdtar tvvf ../unzip.zip 
drwxr-xr-x  0 501    20          0 Mar 11 14:40 a/šáčžřŠÁČÝŘŽÚ§/
Archive Format: ZIP 1.0 (uncompressed),  Compression: none

답변1

그것은 함께 있어야합니다

LANG=en_US.UTF-8 unzip -l a.zip

UTF-8은 LANG에 유효한 값이 아닙니다. 사용 가능한 로케일을 나열하려면 다음을 시도하십시오.

locale -a

여기에 나열되지 않은 경우 en_US.UTF-8나열되고 UTF-8로 끝나는 것 중 하나를 시도해 보십시오.

나는 이것을 Ubuntu 시스템에서 시도했지만 이것이 Mac OS에서도 작동할 것이라고 믿습니다. 또한
현재 귀하의 로케일에 설정되어 있거나 의견에서 제안된 대로 설정하면 귀하와 비슷한 문제가 있는 출력이 나오는 것을 확인했습니다 .LANG=""LANG=UTF-8

관련 정보