質問
2013年10月28日月曜日 2:18
お世話になります。
どこのフォーラムが最適なのか不明なので、とりあえずここに質問させていただきます。
現在、プログラムでファイルの圧縮解凍をする場合、
UNLHA32.DLL(lzhフォーマット)を使っているのですが、
中国語OSで使用する際、UNICODE外の文字コードをShift-JISにする必要があり、
中国人には使いづらい環境になってしまいます。
そこで、別の圧縮解凍Dllを探しているのですが、XP以上にはZIP圧縮解凍機能が
OS標準としてあるので、ひょっとしたら、zip用のdllがあるのでは?と考えました。
Windows標準のzip圧縮解凍の機能(dll)をCプログラムから使う方法がありましたら、
ご教授の程、お願いいたします。
開発環境 VIsualStudio2005(C;;およびC)
運用環境 WindowsXp,7 Server2003
すべての返信 (5)
2013年10月28日月曜日 5:34 ✅回答済み
質問文に答えるならば、Zipfldr.dllです。ただしそのインターフェースは公開されておらず、呼び出すことができません。
蛇足ですが、ZIPファイル形式の仕様にはファイル名に「Unicodeを使用する」フラグがあります。ただし、Windows 7以前のエクスプローラーはこのフラグを無視し、ANSI(つまり日本語OSならSHIFT_JIS)として解釈します。そのため、LHAと同じ状況が発生するだけです。
Windows 8からはこのフラグを参照しファイル名を適切に扱うようになりました。ただし、新規作成する場合は従来通りANSI(SHIFT_JIS)で作成します。
中国人に使いづらい環境は変わらないはずです。
# Windows 7においてWindows 8と同様の動作にするための修正パッチはKB2704299です。
なお、.NET Framework 4.5からZipArchiveクラスによりZIPファイルを操作できます。ただしこちらはWindows Server 2003での動作をサポートしていません。
2013年10月28日月曜日 6:04
To:佐祐理さん
さっそくの返信ありがとうございます。
そうなんですね。圧縮解凍は、意外とハードルの高い技術なんですね。
いつも丁寧な説明をありがとうございます。
2013年10月28日月曜日 8:50
エクスプローラーは多国語対応でしょうけど、シェル(cmd.exe)の多国語対応が今一なので、引数の扱いが面倒なんですよね。
試してませんが、PowerShell経由ならUTF-16がデフォルトなので、中国語のファイル名をそのまま圧縮してくれそうな気がします。
Compress Files with Windows PowerShell then package a Windows Vista Sidebar Gadget
2013年10月28日月曜日 12:19 | 1 票
しません。
# そもそもWindows内部ではほぼすべてUTF-16で処理されています。そのデータをどう扱うかの部分で、SHIFT_JISに変換される、と説明しています。
2013年10月28日月曜日 13:22
一応ですが、OS 標準のものを CopyHere などで利用することも サポート外 と明言されています。
(代替ソリューションを検討すべきと言うのは変わりません)