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 중국어 웹사이트의 기타 관련 기사를 참조하세요!