일반적으로 Java를 사용하여 파일을 패키지하고 압축 파일을 생성한 후 다음 두 위치에 잘못된 문자가 나타납니다.
1. 중국어 왜곡 문제 인터넷의 많은 사람들이 이 문제에 대한 해결책을 제시했습니다. 두 가지 주요 방법이 있습니다. 하나는 sun의 소스 코드를 수정하는 것이고, 다른 하나는 오픈 소스 클래스 라이브러리인 org.apache를 사용하는 것입니다. .tools.zip.ZipOutputStream 및 org.apache.tools.zip.ZipEntry, 이 두 클래스는 ant.jar에 포함되어 있으며 직접 다운로드하여 사용할 수 있습니다. 후자를 선택하는 것이 더 편리하다는 것은 의심의 여지가 없습니다.
2. 압축 파일 주석의 중국어 문자 왜곡 문제: zos.setComment("중국어 테스트"); 온라인에는 이 문제에 대한 해결책에 대한 정보가 적습니다. 프로젝트에서 생성한 테스트 클래스는 제 컴퓨터에서 문제가 없었는데, 회사 프로젝트에서 사용하면 인코딩 설정(zos.setEncoding("gbk");) 방법을 사용해서 글자가 계속 깨져서 나오더군요. 드디어 테스트 프로젝트에서 문제점을 발견했습니다. 인코딩 방식은 gbk이고, 회사 프로젝트의 기본 인코딩은 utf-8이라 테스트 프로젝트에서는 문제가 없는데, 회사 프로젝트에서는 문제가 발생합니다.
org.apache.tools.zip.ZipOutputStream은 기본적으로 프로젝트의 인코딩 방법을 사용합니다. 이론적으로 말하면 utf-8은 중국어도 지원합니다. 왜 여전히 왜곡되는지 알 수 없습니다. gbk에 대한 방법입니다.
위 문제의 샘플 코드는 다음과 같습니다.
패키지 com.compress;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org. apache.tools.zip.ZipEntry;가져오기 org.apache.tools.zip.ZipOutputStream; public class CompressEncodingTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { File f = new File("중국어 테스트. txt"); ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream( new FileOutputStream("zipTest.zip"), 1024)); zos.putNextEntry(new ZipEntry("중국어.txt")); DataInputStream dis = new DataInputStream(new BufferedInputStream( new FileInputStream(f))); ZipEntry(f.getName())); dis.read()) != -1) { zos.write(c) } zos.setEncoding("gbk"); zos.setComment("중국어 테스트"); ; }}