内のファイル名にUnicode文字を使用すると、別のフォルダにPéréquationLES HOPITAUX NEUFS.xlsのようないくつかの特殊文字が含まれている、一時は言います。私は、ファイル名をビュンいzipアーカイブ
私は、ファイルを圧縮することが可能だが、問題は、ファイルの名前が P +¬r+¬quationLES HOPITAUX NEUFS.xlsに自動的に変更されています。
zipアーカイブ内のファイル名にUnicode文字をサポートするにはどうすればよいですか?
内のファイル名にUnicode文字を使用すると、別のフォルダにPéréquationLES HOPITAUX NEUFS.xlsのようないくつかの特殊文字が含まれている、一時は言います。私は、ファイル名をビュンいzipアーカイブ
私は、ファイルを圧縮することが可能だが、問題は、ファイルの名前が P +¬r+¬quationLES HOPITAUX NEUFS.xlsに自動的に変更されています。
zipアーカイブ内のファイル名にUnicode文字をサポートするにはどうすればよいですか?
これは、アーカイブの作成に使用しているコードによって少し異なります。 古い Java圧縮クラスは、必要なだけ柔軟性がありません。
Apache Commons Compressを使用できます。あなたは、Java 7を使用しているなら、あなたは最終的にZipOutputStream constructor
に(つまり、UTF-8可能)大きな問題をCharset
パラメータを持っている
ZipArchiveOutputStream ostream = ...; // Your initialization code here
ostream.setEncoding("Cp437"); // This should handle your "special" characters
ostream.setFallbackToUTF8(true); // For "unknown" characters!
ostream.setUseLanguageEncodingFlag(true);
ostream.setCreateUnicodeExtraFields(
ZipArchiveOutputStream.UnicodeExtraFieldPolicy.NOT_ENCODEABLE);
、:Michael Simonsは、コードのこの素敵な作品を書きましたとにかく、多くの実装でUnicodeエンコーディングが理解できないというのは、オリジナルののZIPファイル形式はASCIIであり、Unicodeの公式な標準はないからです。詳細はthis postを参照してください。
Zip仕様では、組み込みのファイル名とコメントに使用する文字エンコーディングは指定されていませんが、IBMコードページ437と呼ばれる元のIBM PC文字エンコーディングセットは、サポートされているエンコード一方、Jar仕様では、Jarファイル内のすべてのファイル名とコメントをエンコードおよびデコードするためのエンコードとしてUTF-8を使用することを明示しています。 Jar/Zipファイルに格納されているファイル名とコメントを扱う際には、java.util.jarとjava.util.zipの実装が厳密にJar仕様に従って、UTF-8を唯一のエンコーディングとして使用していました。
結論? "従来の" ZIPツールで作成されたZIPファイルは、java.util.jar/zipベースのツールではアクセスできません。その逆もあります。ファイル名にCp437間で互換性のない文字が含まれている場合(代わりに、 UTF-8
ほとんどのヨーロッパ人にとっては、ウムラウトなどの文字の「一握り」を避ける必要があるだけで、あなたは「ラッキー」です:-) )、日本語と中国語の場合、文字の大部分は単に運が悪いだけです。これは、バグ4244499が長年にわたりトップ25 JavaバグのNo.1となっていた理由です。バグはもうリストにはありません:-) OpenJDK 7、b57では最終的に "修正"されています。
JDK7 b57のソリューション(「解決策」よりも「解決策」を使用する)は、新しいZipInputStream ZipOutStreamおよびZipFileコンストラクタセットを導入することです。以下に示すように、特定の「charset」をパラメータとして使用します。
ZIPファイル(ファイル、文字セット)
ZipInputStream(入力ストリーム、文字セット)
ZipOutputStream(OutputStreamを、文字セット)
これらの新しいコンストラクタでは、アプリケーションは、これらのアクセスすることができます特定のエンコーディングで作成されたZipInputStreamまたはZipFileオブジェクト経由の非UTF-8 ZIPファイル、または新しいZipOutputStream(os、c)を介した非UTF-8でエンコードされたZipファイルの作成harset)コンストラクタを使用します。
zipは、エントリ名とコメントの非UTF8エンコーディングをサポートするための "-encoding"オプション付きのJarツールの除外版です。新しいAPIの使用方法のデモとして役立ちますユニットテストとして)。 Jarツールに正式に "-encoding"を導入することをお勧めしますと、私はまだ議論しています...
私はJava 6を使用しています:) – Maddy
こんにちは、これを見てくださいzip compress probem http://stackoverflow.com/a/21521784/1194578 – mathi