히브리 이름을 가진 파일의 ZIP 아카이브를 올바르게 압축 해제하려면 어떻게해야합니까?


18

누군가 히브리어 이름을 가진 파일이 들어있는 ZIP 파일을 보냈습니다 (그리고 어떤 도구로 확실하지 않은 경우 Windows에서 생성). 데비안 스트레치에서 LXDE를 사용합니다. Gnome 아카이브 관리자는 파일의 압축을 풀지 만 히브리어 문자는 깨집니다. 나는 생각 나는 이름이 네 문자와 .DOC의 suffic을 가진 파일을 예를 들어 I, 유니 코드 문자로 확장 UTF-8 옥텟을 받고 있어요, 그리고 문자는 다음과 같습니다 0x008E 0x0087 0x008E 0x0085. 명령 행 unzip 유틸리티를 사용하면 훨씬 더 나빠집니다. "잘못된 또는 불완전한 멀티 바이트 또는 와이드 문자"에 대해 불평하면서 압축 풀기를 거부합니다.

그래서 내 질문은 :

  • 올바른 이름으로 파일을 압축 해제 할 다른 압축 해제 유틸리티가 있습니까?
  • 파일 압축 방식에 문제가 있습니까, 아니면 ZIP 구현의 비 호환성입니까? 아니면 Linux ZIP 유틸리티의 잘못된 기능 / 버그?
  • 깨진 파일을 사용하여 압축을 푼 후 올바른 파일 이름을 얻으려면 어떻게해야합니까?

cp862 테이블 에서 해당 바이트를 조회 하면 파일 이름이 예상 한 것과 일치합니까? 그렇지 않으면 소스 시스템의 기본 인코딩을 알고 있습니까?
Michael Homer

cp1255의 Ditto 및 기타 다른 가능한 인코딩 올바른 모양에 따라 문제를 해결하는 것이 가능할 수도 있습니다.
Michael Homer

@MichaelHomer : 아니요, 일치하지 않는 것 같습니다. 원본 컴퓨터의 기본 인코딩은 지역 설정을 히브리어-이스라엘로 설정할 때 MS Windows가 사용하는 모든 것이므로 UTF-8, 때로는 CP1255 인 것 같습니다.
einpoklum

답변:


15

파일 이름이 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로 변환하려고 시도합니다.

    두 경우 모두 다른 인코딩을 시험 해보고 의미가있는 것을 찾아보십시오.


인코딩을 수정 한 후이 파일을 다른 방향으로 다시 보내려면 다른 쪽에서도 같은 문제가 발생할 수 있습니다. 이 경우 -UUWindows에서 수정하기가 매우 어려울 수 있으므로 파일을 압축하기 전에 프로세스를 되돌릴 수 있습니다 .


내가 찾은 ZIP 파일이 이제 관련이없는 이유 때문에 사라졌기 때문에 이것이해야 할 것 같습니다. 고마워, 다음에이 일을하고 최선을 다하겠습니다.
einpoklum

1
rar또는 p7zip.zip 아카이브 처리를 거부하십시오. Linux에서 독점 인코딩으로 파일 이름을 가진 아카이브를 추출하는 방법이 있습니까? 로 추출 unzip하면 오류가 발생합니다. "오류 : ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ create을 (를) 만들 수 없습니다 ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .png 파일 이름이 너무 깁니다 "
Nickolai Leschov

.zip 파일을 올바르게 추출했습니다 LANG=ru_RU.CP1251; unzip Bleed.zip(필자의 경우 키릴 인코딩이었습니다). 이제 기본적으로 GUI에서 이러한 .zip 파일을 올바르게 열 수 있도록 시스템을 어떻게 설정해야합니까?
Nickolai Leschov

@NickolaiLeschov 질문을하면 누군가가 도와 드릴 수 있습니다. 시스템에 대한 자세한 정보를 제공해야 할 수도 있습니다.
Michael Homer

unzip -UU foo.zip터키 문자 작업
Mert S. Kaplan

8

나는 명령으로 성공했다 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 비트 문자가 포함 된 모든 파일의 압축을 풀 수 있었으며 일부 문자는 건너 뛰고 일부 문자가 왜곡되었습니다.


p7zip은 나를 위해 일한 유일한 사람
alex88

6

방금 같은 문제가 있었고 스위치 를 지정하면 unzipUbuntu 저장소 ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.) 에서 사용할 수 있는 내 버전 의 파일 이름 자동 디코딩을 처리 할 수 ​​있습니다 -a.

unzip -a stupid.zip

+1 지금은 이것을 테스트 할 것이 없습니다.
einpoklum

1
의 man 페이지에 따르면 스위치 텍스트 파일을 변환을 담당한다. 파일 이름이 아닙니다. unzip-a
beruic

@beruic, 유니 코드 번호를 파일 이름 (# U + 0040 # U + 0050 ...)으로 압축 해제 한 다음 "unzip -a"가 실제로 도움이되었습니다.
chang zhao

1
나는 일부 만화에서 이것을 시도했다. 파일 이름이 올바르게 디코딩되었지만 이미지도 텍스트 (!)로 해석되어 완전히 손상되었습니다. 심지어 아카이브 내부의 zip 및 rar 파일을 텍스트로 해석하기 때문에 탐지 기능이 완전히 쓸모가 없습니다.
rjh 2016 년

2

키릴 문자로 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 -aLANG*환경 변수는 어떤 좋은하지 않았다.


다음에 압축을 풀 수있는 zip 파일이 있으면 다시 시도해 보겠습니다. 감사합니다. 그러나-다음과 같이 스크립트를 변경할 수 있습니까? 1. 두 개의 인수가 있는지 확인하십시오. 2. zip 파일 만 제공되는 경우 현재 작업 디렉토리로 추출하십시오.
einpoklum

2

이 조합으로 운이 좋았습니다.

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

convmv 및 명령 줄 7zip 도구의 경우 +1
einpoklum

아마 하나는 다른 옵션을 시도하는 LANG변수 에서 손에있는 파일에 따라 인코딩을. LANG=ru_RU.CP1251함께 -f cp866일한 파일이 있습니다 .
Dmitri Chubarov

0

Linux에서 (명령 줄에서) 압축 압축 파일이 압축되어 있고 분음 부호 문자가있는 파일 이름이 Windows에서 올바르게 압축 해제되지는 않지만 툴바에서 문자 세트를 설정할 수 있는 Bandizip 소프트웨어를 사용 하여 압축을 풉니 다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.