2016年2月15日月曜日

Zipファイルの日本語ファイル名

DotNetZip(Ionic Zip Library)を使ってUTF-8でファイル名をエンコードすると日本語ファイル名が文字化けするので原因を調査した。

DotNetZip(Ionic Zip Library)を使用したのは、.NET Framework 4.5からZip圧縮のライブラリが追加されているが、追加でインストールせず、Windows 7も含めて対応してほしいと要求があったため。


-----------
ZIPファイルに格納するファイル名には文字コードの概念がない。
そのため、圧縮・解凍する際にファイル名のエンコーディングを指定する必要がある。
その際、日本では一般にSHIFT-JISが指定される。

Unicodeに未対応のツールの場合、Unicode文字をSHIFT-JISとみなして処理するため、解凍できなかったり、ファイル名が文字化けしたりする。

Windowsの標準ExplorerがUnicode ZIPに正式に対応したのは、Windows 8以降。(Windows 7はHotfix適用)
.NET Framework 4.5のZipArichiveクラスはUnicodeに対応している。


-----------
暗号化はもっとひどい。Windows 10であっても標準エクスプローラで復号できるのはキー長が96bitであるZipCrypto(traditional PKWARE encryption)だけ。

参考

KB2704299 
Windows 7 または Windows Server 2008 R2 で .zip ファイルの解凍後にファイル名が破損しています。
https://support.microsoft.com/ja-jp/kb/2704299


DotNetZipでの圧縮について 
https://social.msdn.microsoft.com/Forums/de-DE/c9a38d80-c649-4b19-9a55-3acde2094659/dotnetzip?forum=csharpgeneralja

0 件のコメント:

コメントを投稿