>  기사  >  Java  >  Java zip 압축 문자 왜곡의 원인과 해결 방법 소개

Java zip 압축 문자 왜곡의 원인과 해결 방법 소개

尚
원래의
2019-12-02 13:20:033330검색

Java zip 압축 문자 왜곡의 원인과 해결 방법 소개

Java zip 압축이 왜곡되는 원인과 해결 방법: (권장: java 비디오 튜토리얼)

실행 환경

Jdk 1.5, win 7 중국어 버전

JDK1.5에는 java 아래에 zip 압축 관련 API가 있습니다. util.zip 패키지. 일반적인 상황에서는 JDK에 포함된 API를 사용하여 디렉터리(파일)를 zip 패키지로 압축합니다.

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));
Out.putNextEntry(new ZipEntry(entryName));
//If entry is directory
//above codes are enough
//else if entry is file
//then the codes below is needed
FileInputStream in = new FileInputStream(infile);
byte[] bs = newbyte[1024];
int b = 0;
while((b = in.read(bs)) != -1) {
zos.write(bs, 0, b);
}
in.close();

패키징할 디렉터리 이름이나 파일 이름에 중국어 문자가 포함된 경우 해당 이름은 다음과 같습니다. 디렉토리나 파일이 깨질 수 있는데, 그 이유는 JDK에 포함된 API에서 ZipEntry를 작성할 때 사용되는 기본 인코딩이 UTF8이기 때문입니다(이것만 있는 것 같은데 변경할 방법이 없습니다. Java7이 개선되었다고 합니다), win7 운영 체제의 중국어 버전은 zip 파일을 처리할 때 GBK 인코딩을 사용하므로, win7의 중국어 버전에서는 패키지 파일이 깨집니다. .

채택할 수 있는 솔루션은 타사 API를 사용하여 zip 압축을 구현하여 중국어 문자 왜곡 문제를 해결하는 것입니다. 다음은 Apache 압축을 사용한 zip 압축 구현입니다. 필요한 jar 패키지는 commons-compress-1.2.jar

ArchiveOutputStream os = new ArchiveStreamFactory()
              .createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
if(os instanceof ZipArchiveOutputStream) {
((ZipArchiveOutputStream) os).setEncoding("GBK");
}
//...some code omitted
os.putArchiveEntry(new ZipArchiveEntry(path+"/"+file.getName()));
IOUtils.copy(new FileInputStream(file), os);
os.closeArchiveEntry();

자바에 대한 자세한 내용은 java 기본 튜토리얼 칼럼을 참고하세요.

위 내용은 Java zip 압축 문자 왜곡의 원인과 해결 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.