通常、Java を使用してファイルをパッケージ化し、圧縮ファイルを生成すると、次の 2 か所で文字化けが発生します。
1. 中国語のコンテンツが文字化けする問題 この問題には、主に 2 つの方法が挙げられています。もう 1 つは、オープンソースのクラス ライブラリ org.apache を使用することです。 .tools.zip.ZipOutputStream と org.apache.tools.zip.ZipEntry、これら 2 つのクラスは ant.jar に含まれており、直接ダウンロードして使用できます。後者を選択する方が便利であることは間違いありません。
2. 圧縮ファイルのコメントに含まれる中国語の文字化けの問題: zos.setComment("中国語テスト"); この問題の解決策に関する情報はオンラインではほとんどありません。自分のマシンでプロジェクトで作成したテストクラスでは問題なかったのですが、会社のプロジェクトで使用するとエンコーディングを設定する方法(zos.setEncoding("gbk");)で文字化けが発生し続けました。テストプロジェクトでようやく問題が見つかりました。エンコード方式はgbkで、会社のプロジェクトのデフォルトのエンコーディングはutf-8なので、テストプロジェクトには問題ありませんが、会社のプロジェクトには問題があります。
org.apache.tools.zip.ZipOutputStream はデフォルトでプロジェクトのエンコード方式を使用しますが、理論的には utf-8 も中国語をサポートしていますが、それでも文字化けする理由がわかりません。setEncoding を変更することで解決できます。 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("Japanese.txt")); DataInputStream dis = new BufferedInputStream( new FileInputStream(f)); ZipEntry(f.getName())); int c; dis.read()) != -1) { zos.write(c); zos.setEncoding("gbk"); zos.closeEntry(); ; }}