[FreeBSD-users-jp 96162] Re: zipアーカイブ中の日本語ファイル
Tomoaki AOKI
junchoon @ dec.sakura.ne.jp
2017年 11月 13日 (月) 12:31:01 UTC
青木@名古屋です。
On Mon, 13 Nov 2017 01:31:15 +0900
maruyama @ ism.ac.jp (丸山直昌) wrote:
> 青木 様
>
> 丸山です。
>
> Sun, 12 Nov 2017 22:46:48 +0900
> Tomoaki AOKI <junchoon @ dec.sakura.ne.jp> writes:
>
> なるほど、それは便利そうですね。有難うございます。つまりは
>
> foreach f (*)
> set g=`echo -n "$f" | nkf -Sw`
> if ( "$f" ne "$g" ) then mv "$f" "$g"
> end
>
> などということは convmv で一発でできる、ということでしょうか。昔Windows
> で使っていたファイル達をそのまま UNIX のファイルシステムに単純コピーした
> ものを未だに大事に持っていたりしますが、それらの日本語ファイル名を一括で
> コード変換するには最適、という感じですね。
まさにそういう用途です。
> ただそれは私の元来の質問の趣旨、つまり unzip の解凍でのファイル名のコー
> ドに関する挙動の問題とは別の話だと思います。今回梅本さんに教えて頂いたこ
> とによってわかったことは
>
> 1. ICONV off でコンパイルされた unzip で解凍した場合
> 2. ICONV on でコンパイルされた unzip をそのまま使って解凍した場合
> 3. ICONV on でコンパイルされた unzip にコマンドラインオプション
> -O sjis を付けて解凍した場合
>
> ではファイル名は全部違う結果になりました。そして 3 だけが私が理解できる
> 文字コードで、他の二つは nkf をどう使っても読める文字のファイル名は現れ
> ませんでした。ま、私の nkf に対する理解が足りないのかも知れませんが、も
> し 1 と 2 の場合にどのようなコードがファイル名として現れるかわかりました
> ら、この ML 書いて報告して頂ければ幸いです。
1も2もコード変換が介在しないので、
アーカイブに記録されたままのコード
という解答しか出来ません。
※文字コードを指定しない場合、iconvの機能は使われないかと。
ただ、1の場合と化け方が違うようなら、別途しらいさんが
コメントされているようにiconvは機能しているが誤変換している
可能性が高いです。
どうしても特定を、となると、しらいさんがコメントされているとおり、
ダンプして調べるくらいしか思いつきません。 幸い3ならファイル名が
読めるとのことなので、ダンプしたコードがその文字になるコード体系を
割出す、と。
zipフォーマット自体では文字コードは強制されないようなので、
個々のアーカイバで
・元ファイルの名前を読み込んだそのまま(ファイルシステム依存)
・特定のコードに変換して記録(UTF-8,Shift-JIS,TRONコード等々)
のどれになるやら。 DOS時代は日本語版ならディレクトリエントリが
ShiftJISのみ対応(他国語版も各々の国で通常1つのコードに対応)
でしたし文字コード変換などという変換テーブルだけでメモリを喰う
処理はしたくても出来なかった背景から先のパターンが主流だったと
思いますが...。
https://ja.wikipedia.org/wiki/ZIP_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%
AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)
を見ても、
6.3.0: Unicode (UTF-8) ファイル名のストレージについて記載した。
サポートされるハッシュ、圧縮、暗号化アルゴリズムが追加された。
のような記載もあることから、(過去からの経緯で)環境や実装次第で
コードは標準化していなさそうですね。 実際、zip形式は本家PKWARE
以外の実装もInfo-ZIPやらWindozeの圧縮フォルダやら多数ありますし。
>
> --------
> 丸山直昌@統計数理研究所
>
--
青木 知明 [Tomoaki AOKI] <junchoon @ dec.sakura.ne.jp>
freebsd-users-jp メーリングリストの案内