2011年2月11日金曜日

うーん、DotNetZIP文字化け

SharePointではないですが、結構悩んだのでポスト

DotNetZIPというライブラリをご存知ですか?
.Netアプリケーションのライブラリで、ZIPファイルの圧縮解凍などが出来ます。

しかし、なぜか、、日本語名ファイルを圧縮したZIPファイルを解凍すると、、文字化けします。
回避は簡単、ZIPライブラリのインスタンスを作成した後に、ZIPファイルを読み込めばOKです。

外人さんの作るライブラリなので、デフォルトの文字コードがS-JISではない事に起因する問題でした。
コンストラクタの中で、使用するエンコーディングとファイルの読み込み処理が実行されてるのですが、何故かZIPファイルのイニシャル処理の後、文字コードの設定をの設定を変更している為デフォルトの文字コードでイニシャル処理されてしまい文字化けする事が原因でした。

ライブラリは触りたくないので、下記の様にZIPファイルの読み込みはコンストラクタ以外で実装すると文字化けしなくなります。

using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(Encoding.GetEncoding("shift_jis")))
{
    zip.Initialize(“C:\Temp\TEST.zip”);
    zip.UseUnicodeAsNecessary = true;
    foreach (Ionic.Zip.ZipEntry e in zip)
    {
        System.Console.WriteLine(e.FileName);
    }
}

1 件のコメント:

匿名 さんのコメント...

同じ問題で躓いていました
ありがとうございます