0

Windows Server 2008 R2 で実行されている C# アプリケーションでは、Windows または MAC OSX で作成された ZIP ファイルを抽出できる必要があります。現在、DotNetZip ライブラリを使用しています。

しかし、このライブラリは、ファイル名に特殊な北欧文字を含む MACOSX ZIP アーカイブを抽出するのに問題があります。Encoding.GetEncoding(string) メソッドでmacintosを含むさまざまなエンコーディングを指定しようとしました。

Windows に組み込まれている zip ツールも、特殊文字を台無しにします。WinRAR 3.x も同様です。しかし、WinRAR 4.x は、正しく機能する唯一のツールのようです。

利用可能な C# ZIP ライブラリを使用して、そのような ZIP アーカイブの権利を抽出することはまったく可能ですか?

更新: これは、Mac OSX のデフォルトの Zip 機能で作成された zip アーカイブの例です。最初のスクリーン ショットは、Windows Zip 機能がファイル名をデコードできない様子を示しています。2 番目のスクリーン ショットは、WinRAR 4.11 で開いたアーカイブを示しています。

Windows 7 Zip で開いたアーカイブ WinRAR 4.11 で開いたアーカイブ

Mac OSX からサンプルの ZIP アーカイブをダウンロードする

4

1 に答える 1

2

チェックアウトしましたかSevenZipSharp... 7-Zip dllを使用してアーカイブとIMOを抽出します.7-zipは最高のアーカイブハンドラーです..

アップデート :

Example zip とDotNetZip.

バイナリでDotNetZip-WinFormsTool.exe提供されていると、 .DotNetZipDropDownBox

UTF-8、Zip Default(IBM437)、UTF-32、Unicode などを試してみました。

UTF-8エンコーディングで最良の結果が得られました... WinRARと同じ読み...

さらに、IMO のみの WinRAR はすべてのアーカイブに UTF-8 を使用していますが、7-Zip、Explorer Default Zip Viewer などの他の Zip ツールは Zip Default エンコーディングを使用しているため、ファイル名を誤って読み取ることができます!

DotNetZipしたがって、あなたの最善の選択肢は、次のようないくつかのコードに固執して使用することです:

using (ZipFile zf = new ZipFile(Application.StartupPath + "\\Arkiv.zip", new UTF8Encoding()))
{
    zf.ExtractAll(Application.StartupPath + "\\Arkiv\\");
}

このコードは、私によって動作することがテストされています! ファイル名を抽出した後、エクスプローラーでは UTF8 形式で表示されますが、zip ファイルを直接開くと、エクスプローラーは Zip デフォルト エンコーディングを使用することに注意してください。

DotNetZipツールを UTF-8 エンコーディングで表示するイメージ: 画像

更新 2:

テキストの自動検出については、およびをEncoding参照できます。This SO QuestionThis Code-Project ArticleUDE - C# port of Mozilla Universal Charset Detector

于 2012-05-25T12:13:10.913 に答える