Ursachen und Lösungen für verstümmelte Java-ZIP-Komprimierung: (Empfohlen: Java-Video-Tutorial)
Laufzeitumgebung
Jdk 1.5 , Win 7 Chinesische Version
JDK1.5 verfügt über eine API für die Zip-Komprimierung, die sich im Paket java.util.zip befindet. Unter normalen Umständen verwenden Sie die mit dem JDK gelieferte API, um das Verzeichnis (die Datei) in ein ZIP-Paket zu komprimieren. Die Schritte sind wie folgt:
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();
Wenn der zu packende Verzeichnisname oder Dateiname chinesische Zeichen enthält , die Namen dieser Verzeichnisse oder Dateien Es werden verstümmelte Zeichen angezeigt. Der Grund dafür ist, dass in der mit dem JDK gelieferten API beim Schreiben von ZipEntry die Standardcodierung UTF8 ist (es scheint, dass es nur diese gibt, und es gibt keine). Es wird gesagt, dass sich Java7 verbessert hat und dass die chinesische Version des Systems bei der Verarbeitung von Zip-Dateien unterschiedliche Codierungs- und Decodierungsprozesse verwendet, was dazu führt, dass die gepackten Dateien in der chinesischen Version verstümmelt werden von win7.
Die Lösung, die übernommen werden kann, besteht darin, eine API eines Drittanbieters zu verwenden, um die Zip-Komprimierung zu implementieren und das Problem der verstümmelten chinesischen Zeichen zu lösen. Das Folgende ist die Implementierung der Zip-Komprimierung mit Apaches Compress. Das erforderliche JAR-Paket ist 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();
Für weitere Java-Kenntnisse beachten Sie bitte das Java Basic Tutorial Spalte.
Das obige ist der detaillierte Inhalt vonEinführung in die Ursachen und Lösungen für verstümmelte Zeichen durch die Java-Zip-Komprimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!