2008年1月25日金曜日

Zip 製品における日本語ファイル名について

Zip コンポーネントを使用して日本語のファイル名を持つファイルをアーカイブした場合、他のツールで展開しようとすると文字化けすることがあります。

これは、Zip コンポーネントでは既定値ではシステムの既定値エンコーディングを使用するため、日本語 Windows 以外の Windows で日本語拡張機能を使用し日本語ファイルを保存しようとした場合に使用されるエンコーディングが Shift-JIS 以外のものになってしまうことで発生します。この問題に対処するために、Zip コンポーネントには Encoding コンフィグパラメータが用意されています。Shift-JIS ファイル名のメンバーファイルを格納する際には、
zip.Config("Encoding=SJIS");

のようにすることでメンバファイル名として指定された日本語文字列を、Shift-JIS コードに変換した上でZip アーカイブのファイル情報に書き込みます。

なお、書き込まれたファイル名の文字セット情報はアーカイブの情報としては持ちませんので、メンバファイル名をどの文字セットで解釈するかはプログラマの責任において行って頂くことになります。

アーカイブ生成時に指定した文字セットと、展開時に指定した文字セットが異なる場合、ファイル名を正しく扱うことができません。

アーカイブ作成と展開で日本語ファイル名が正しく処理されない場合には、この Encoding コンフィグパラメータをお試しください。

補足: この Encoding コンフィグパラメータは、メンバファイル名だけでなく同時にパスワード文字列にも影響を与えます。Encoding=SJIS が設定されている場合は、パスワード文字列も Shift-JIS 文字列としてアーカイブに書き込まれます。逆に言うと、ファイル名とパスワードは異なる文字セットを利用することはできません。

0 件のコメント: