[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 メーリングリストの案内