Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: zipフィルタ Re: lha フィルタ
寺西です。
Tadamasa Teranishi wrote:
>
> 手元の .zip ファイルは WinZip 8.1SR-1 日本語版ですが、これはこれで
> 王道のツールですけどね。
> # 日本語ファイル名の内部エンコードが特殊なのかな!?
ということではなくて、やはり unzip の問題でした。
unzip の fileio.c の do_string で、Ext_ASCII_TO_Native() により、
ファイルネームのコード変換を行っていました。
これは、fat または hpfs の場合(実際には更に条件が付く)は iso8859-1 と
みなし、OEM 文字の変換を行うようです。
Shift_JIS コードは、ここで iso8859-1 と見なされ、破壊されます。
(可逆変換ではないので、変換後のコードから元のコードには戻せません。)
残念なことにこの機能を禁止するスイッチ類はないみたいです。
該当部分をコメントアウトすれば、unzip -z で Shift_JIS 文字で表示
されることは確認しました。
WinZip で作成した .zip ファイルの場合、
Archive: test002.zip 8497 bytes 2 files
-rw-rw-rw- 2.0 fat 25600 b- defN 15-May-03 04:56 aaa.doc
-rw-rw-rw- 2.0 fat 27648 b- defN 1-Apr-03 23:42 bbb.doc
2 files, 53248 bytes uncompressed, 8287 bytes compressed: 84.4%
のように fat になります。UNIX だと unx になります。
cygwin は確かめていませんが、cygwin で作成した場合には unx になる
のではないかと思います。
このため、WinZip では Ext_ASCII_TO_Native() が働き、文字化けしたが
cygwin だと Ext_ASCII_TO_Native() が働かず、文字化けしなかった
ということではないかと思います。
改造した unzip が必須というのはあまりにきついので、
後ろ向きな解決方法ですが、fat と hpfs の場合は、元ファイル名を
使わないといった対策が現実的ではないかと思います。
あるいは、Perl モジュール必須にするかですね。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E