7

inputStreamをエントリとしてzipに追加するメソッドがあります。

private void addToZip(InputStream is, String filename) throws Exception {
    try {
        ZipEntry zipEntry = new ZipEntry(filename);
        zos.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = is.read(bytes)) >= 0) {
            zos.write(bytes, 0, length);
        }
        zos.closeEntry();
    } finally {
        IOUtils.closeQuietly(is);
    }
}

この問題は、ファイル名にáéのようなUTF-8文字が含まれている場合に発生します... zipファイルでは、として保存され?????、ubuntu 12.10で解凍すると、N├бstrojeの代わりに次のようになりNástrojeます。

この例では、jdk6を使用しましたが、jdk7も試しました。

zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));

しかし、成功しませんでした。

また、Apache Commons Zipとセットエンコーディングを試しましたが、成功しませんでした。

では、ファイル名にユニコード記号を含むこのファイルをzipに追加するにはどうすればよいですか?

4

2 に答える 2

4

この行は私の問題を解決したようです:

        zos.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS);

誰かが私にこれが何をしているのか、そしてなぜそれが機能するのか説明できますか?

于 2013-03-20T12:01:16.497 に答える
2

Zipアーカイブは、デフォルトでDOS(OEM)コードページを使用してファイル名を保存します。Linux / unixの実装では、解凍時にシステムコードページを使用します。MacOSはデフォルトでutf-8を使用します。したがって、あなたの場合、ファイル名は正しく保存されますが、Linuxアーカイバはそれを理解しません。

于 2013-03-20T10:38:22.333 に答える