누군가 히브리어 이름을 가진 파일이 들어있는 ZIP 파일을 보냈습니다 (그리고 어떤 도구로 확실하지 않은 경우 Windows에서 생성). 데비안 스트레치에서 LXDE를 사용합니다. Gnome 아카이브 관리자는 파일의 압축을 풀지 만 히브리어 문자는 깨집니다. 나는 생각 나는 이름이 네 문자와 .DOC의 suffic을 가진 파일을 예를 들어 I, 유니 코드 문자로 확장 UTF-8 옥텟을 받고 있어요, 그리고 문자는 다음과 같습니다 0x008E 0x0087 0x008E 0x0085. 명령 행 unzip 유틸리티를 사용하면 훨씬 더 나빠집니다. “잘못된 또는 불완전한 멀티 바이트 또는 와이드 문자”에 대해 불평하면서 압축 풀기를 거부합니다.
그래서 내 질문은 :
- 올바른 이름으로 파일을 압축 해제 할 다른 압축 해제 유틸리티가 있습니까?
- 파일 압축 방식에 문제가 있습니까, 아니면 ZIP 구현의 비 호환성입니까? 아니면 Linux ZIP 유틸리티의 잘못된 기능 / 버그?
- 깨진 파일을 사용하여 압축을 푼 후 올바른 파일 이름을 얻으려면 어떻게해야합니까?
답변
파일 이름이 Windows의 독점 코드 페이지 중 하나 ( CP862 , 1255 등) 로 인코딩 된 것 같습니다 .
-
올바른 이름으로 파일을 압축 해제 할 다른 압축 해제 유틸리티가 있습니까? 이 코드 페이지를 기본적으로 지원하는 zip 유틸리티를 알지 못합니다. 7z는 인코딩에 대해 어느 정도 이해하고 있지만 시스템이 더 일반적으로 알고있는 인코딩이어야한다고 생각합니다 (
LANG
환경 변수 를 설정하여 선택하십시오 ).unzip -UU
명령 행에서 작업하여 이름에 올바른 바이트를 가진 파일을 작성해야합니다 (모든 유니 코드 지원 사용 안함) 그것은 아마도 그놈의 도구에서 얻은 효과 일 것입니다. 인코딩은 옳지 않지만 아래에서 수정할 수 있습니다. -
파일 압축 방식에 문제가 있습니까, 아니면 ZIP 구현의 비 호환성입니까? 아니면 Linux ZIP 유틸리티의 잘못된 기능 / 버그? 귀하가 제공 한 파일이 이식 가능하게 작성되지 않았습니다. 형식 사양에 따라 이름이 UTF-8 또는 cp437이고 사용자의 이름이 아닌 것으로 인코딩이 고정되어 있고 사전에 알려진 내부 사용에는 반드시 잘못된 것은 아닙니다. Windows 시스템 간에도 서로 다른 코드 페이지를 사용하는 것이 제대로 작동하지 않지만 Windows 이외의 시스템에는 이러한 코드 페이지 개념이 없습니다. 대부분의 도구 UTF-8은 파일 이름을 인코딩합니다 (여전히 문제를 피하기에 충분하지는 않습니다).
-
깨진 파일을 사용하여 압축을 푼 후 올바른 파일 이름을 얻으려면 어떻게해야합니까? 파일 이름 인코딩을 식별 할 수 있으면 기존 이름의 바이트를 UTF-8로 변환하고 기존 파일을 올바른 이름으로 이동할 수 있습니다. 이
convmv
도구는 기본적으로 해당 프로세스를 단일 명령으로 마무리합니다.convmv -f cp862 -t utf8 -r .
내부의 모든 것을.
cp862에서 UTF-8 로 변환하려고 시도합니다 .또는 사용
iconv
하고find
모든 것을 올바른 이름으로 옮길 수 있습니다 . 다음과 같은 것 :find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
현재 디렉토리 아래의 모든 파일을 찾고 이름을 UTF-8로 변환하려고 시도합니다.
두 경우 모두 다른 인코딩을 시험 해보고 의미가있는 것을 찾아보십시오.
인코딩을 수정 한 후이 파일을 다른 방향으로 다시 보내려면 다른 쪽에서도 같은 문제가 발생할 수 있습니다. 이 경우 -UU
Windows에서 수정하기가 매우 어려울 수 있으므로 파일을 압축하기 전에 프로세스를 되돌릴 수 있습니다 .
답변
나는 명령으로 성공했다 7z x <source.zip>
.
버전:
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,[...])
잠재적으로 관련된 환경 :
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8
파일 이름에 8 비트 문자가 포함 된 모든 파일의 압축을 풀 수 있었으며 일부 문자는 건너 뛰고 일부 문자가 왜곡되었습니다.
답변
방금 같은 문제가 있었고 스위치 를 지정하면 unzip
Ubuntu 저장소 ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
) 에서 사용할 수 있는 내 버전 의 파일 이름 자동 디코딩을 처리 할 수 있습니다 -a
.
unzip -a stupid.zip
답변
키릴 문자로 zip 아카이브를 디코딩하는 데 비슷한 문제가있었습니다. 한 줄의 파이썬 스크립트가 제대로 작동했습니다.
#!/usr/bin/python
import zipfile
import sys
zipfile.ZipFile(sys.argv[1], 'r').extractall(sys.argv[2] if len(sys.argv) > 2 else '.')
그런 다음 전화 unzip_enc
를 걸어unzip_enc ZIP_FILE [TARGET_DIR]
나를 위해 어느 쪽도 unzip -UU
, unzip -a
도 LANG*
환경 변수는 어떤 좋은하지 않았다.
답변
이 조합으로 운이 좋았습니다.
export LANG=es_MX
7z x file.zip
convmv -f cp437 -t utf8 -r .
실제 이름을 바꾸려면 convmv에 –notest를 추가하십시오. 나중에 더 나은 버전을 찾았습니다.
LANG=es_MX.cp437 unzip -UU file.zip
convmv -f cp437 -t utf8 -r . --notest
답변
Linux에서 (명령 줄에서) 압축 압축 파일이 압축되어 있고 분음 부호 문자가있는 파일 이름이 Windows에서 올바르게 압축 해제되지는 않지만 툴바에서 문자 세트를 설정할 수 있는 Bandizip 소프트웨어를 사용 하여 압축을 풉니 다 .