zip에 이상한 문자가 포함된 파일을 올바르게 압축 해제하는 방법은 무엇입니까?

zip에 이상한 문자가 포함된 파일을 올바르게 압축 해제하는 방법은 무엇입니까?

저는 Linuxverse를 처음 접했기 때문에 표준적인 질문을 드리는 것인지 이해해 주시기 바랍니다.

방금 다음 링크를 사용하여 zip 파일을 다운로드했습니다.https://io.genesis-ark.club/common/20240401/삼국지 명장들의 기록(2).zip

처음 다운로드를 이용했을 때, wget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip"다운로드가 완료된 후 오류가 나서 그냥 재다운로드를 이용했습니다. 하지만 zip을 추출하려고 하면 다음과 같이 이상한 결과가 나타납니다.???????.zipwget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip" -O mydownload.zip

여기에 이미지 설명을 입력하세요.

그래서 세부 정보가 포함된 zip 파일을 얻는 방법을 찾으려고 노력 중입니다. 인터넷 검색 중에 찾았는데 zipinfo mydownload.zip출력이 나에게도 이상해 보입니다.

여기에 이미지 설명을 입력하세요.

비표준 프로그램(rar, zip, 7z 등)을 사용한 압축으로 인해 발생하는 경우도 있나요? 어떻게 해결할 수 있나요? 7zip을 사용해 보았 unzip -a으나 아무 것도 작동하지 않았습니다.

참고: 저는 Centos 7.0을 사용하고 있습니다.

의견을 바탕으로 한 추가 정보:

출력 locale charmap:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ANSI_X3.4-1968

출력 locale:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

답변1

로케일의 문자 인코딩은 미국식( ASCII 및 ANSI) 영어 ANSI_X3.4-1968와 128개의 고유한 문자만 포함하는 문자 세트인 ASCII의 또 다른 이름 입니다.A

중국 특유의 느낌이 전혀 없습니다.

LC_CTYPE환경 변수가 로 설정되어 있지만 CentOS 시스템에서는 유효한 로케일 이름이 아니기 UTF-8때문에 이러한 로케일을 가져오는 것입니다 ( 지원되는 로케일 목록은 의 UTF-8출력 참조 ). locale -aApple macos(이전의 macOS, OS/X, MacOS/X 또는 Apple 마케팅 팀에서 언젠가 부르기를 좋아하는 이름)는 예외로 알려진 소수의 시스템에서 유효한 로케일입니다.

로캘 범주가 다음과 같은 경우를 LC_CTYPE다룹니다 .문자 인코딩무엇보다도 찾을 수 없으며 C대부분의 시스템(CentOS 포함)의 로캘이 기본값이며 charmap은 ASCII입니다.

출력에는 환경 변수가 로 설정된 locale것으로 표시됩니다 .LANGen_US.UTF-8

이것은 시스템에서 유효한 로케일입니다. 이 LC_CTYPE로케일은 가짜이므로 설정하지 않은 채로 두어야 합니다. 따라서 이 로케일은 LC_*파생된 다른 범주 $LANG와 마찬가지로 en_US.UTF-8유니코드 인코딩인 UTF-8 문자 맵을 갖습니다. 알려진 모든 기존 문자를 포함합니다. .

다음을 수행하여 셸 환경에서 로컬로 이 문제를 해결할 수 있습니다.

unset -v LC_CTYPE

(POSIX와 유사한 쉘을 가정)

그러면 다음과 같은 출력이 표시됩니다 locale.

LC_CTYPE="en_US.UTF-8"

(큰따옴표는 값이미루다$LANG, 여기서는 설정되지 않음 에서 비롯됨 $LC_ALL)

문제를 보다 영구적으로 해결하려면 해당 환경 변수를 설정하는 것이 무엇인지 파악해야 합니다.

ssh한 가지 가능성은 Macos 시스템에서 해당 CentOS 시스템에 로그인했으며 Macos 시스템의 환경에는 LC_CTYPE=UTF-8(작동하는 대로) 포함되어 있으며 ssh일반적으로 지역화된 변수를 서버 1에 전달하도록 구성되어 있으며 결국 서버 1에 전파됩니다. CentOS 시스템의 원격 셸 세션.

이 경우, macos에게 변수 전송을 중지하라고 지시하거나 LC_CTYPE, macos에만 국한되지 않고 다른 시스템으로 이식 가능한 값을 보내야 합니다. 예를 들어 다음을 추가할 수 있습니다.

SetEnv LC_CTYPE=en_US.UTF-8

~/.ssh/config이 변수의 특정 값을 보냅니다 . Macos가 아닌 시스템에 가짜 환경 변수 값을 보내는 것은 명백히 $LC_CTYPE번거롭기 ssh_config때문에 이를 Apple 문제로 제기할 수도 있습니다. .

다음과 같이 할 수도 있습니다.

env -u LC_CTYPE ssh centos-machine

바꾸다:

ssh centos-machine

LC_CTYPE환경 변수가 ssh원격 셸로 전달되지 않았는지 확인하세요 .


¹ 일반적으로 SendEnv LANG LC_*클라이언트 및 AcceptEnv LANG LC_*서버 측 의 일부 구성 지침을 통해

관련 정보