I18Nファイル名でWinZIPので作成したファイルを解凍しますか?
-
11-09-2019 - |
質問
人々は、これらの日は、国際化が可能になりますWinZIPの、と彼らのZIPアーカイブを作成します。(すなわち、非ラテン系:、キリル文字、ギリシャ語、中国語、あなたはそれに名前を付ける)ファイル名
悲しいことに、そのようなファイルを解凍しようとするトラブルが発生します。 UNIXの解凍には、「®£¤©¤¥EI」のようなゴミ名前のファイルとのdirsを作成します。 Javaとそのjarコマンドは、アーカイブに無残に失敗します。
プログラムでこのようなファイルを解凍するにはまずまずの方法はありますか? UNIXまたはJavaます。
解決 2
私が見つけた解決策: 正しい代替文字セットに付属している場合はApache Commonsの-圧縮は、うまくそのようなアーカイブを解凍することができます。
他のヒント
DotNetZip のzipファイル内のファイル名の、いずれかの読み出しや書き込みジッパーのUnicodeと任意のエンコーディングをサポートしています。
これは、.NETライブラリです。 Unixの使用方法については、次の前提条件として、モノが必要になります。
これはに準拠していた場合にzipファイルが正しく言い換えれば、のWinZipで構成されている場合PKWareのでからジップ仕様は、その後、あなたはそれを解凍時にエンコーディングを指定するために必要な特別な作業はありません。 UTF-8とIBM437:ジップ仕様によると、zipファイルにファイル名に使用される2つのサポートされるエンコーディングがあります。これらのエンコーディングの1または他の使用は、がのそれを検出して使用することができジップメタデータと任意のジップライブラリに指定されています。準拠したzipファイルを読み込むときDotNetZipは、それを自動的に検出します。このような:
using (var zip = ZipFile.Read("thearchive.zip"))
{
foreach (var e in zip)
{
// e.FileName refers to the name on the entry
e.Extract("extract-directory");
}
}
「非対応」w.r.t.あるジッパーを生産アーカイブプログラムがありますエンコーディング。 WinRarのは1である - それは、コンピュータで使用されているデフォルトのエンコードでエンコードされたファイル名を持つzipファイルを作成します。アイスランドでは、何か他のもの、そしてリスボン、何か他にいる間、上海では、CP950を使用します。ここで「非準拠」の利点は、Windowsエクスプローラを開き、正確なジッパーでI18N化したファイル名を表示することです。 WindowsはUTF-8のzipファイルをサポートしていない(まだ?)ないので、他の言葉では、「非準拠」には、人々が望むものが多いです。
タグ(このすべては、zipファイルに使用されるエンコーディングではなく、zipファイルに含まれるファイルで使用されるエンコーディングに関係しています)
ジップ仕様は、ZIPメタデータ内の任意のテキストエンコードの指定を可能にしません。 zipファイルを作成するときにCP950を使用する場合は、他の言葉では、その後、あなたの抽出ロジックを抽出するときにCP950を使用することを「知る」必要がある - zipファイルでは何がその情報を運びません。また、もちろん、あなたがプログラム的に抽出するために使用したzipライブラリーは、任意のエンコーディングをサポートしている必要があります。私の知る限りでは、JavaのZIPライブラリにはありません。 DotNetZipはありません。これと同様ます:
using (ZipFile zip = ZipFile.Read(zipToExtract,
System.Text.Encoding.GetEncoding(950)))
{
foreach (ZipEntry e in zip)
{
e.Extract(extractDirectory);
}
}
「非対応」ジッパー - DotNetZipはまた、任意のエンコーディングでzipファイルを作成することができます。
DotNetZipは無料で、オープンソースます。