2009年5月5日火曜日

zipファイルの文字化け

他環境からDebianにファイルを持ってきた場合、文字コードの違いから日本語ファイル名が文字化けすることがあります。対処法としては以前このブログでも紹介した「convmv」を使い変換する方法があります。しかし、zipファイルから解凍したファイルには「convmv」で変換しても文字化けが直らないものがあります。
通常Debianでzipファイルを解凍するには「unzip」を使用します。「unzip」は解凍の際に文字コードを自動的に変換する機能を有していてるのですが、これが曲者で強制的にラテン語ベースで変換を行ってしまうらしいのです。これにより日本語のファイル名が破損し「convmv」で変換しても文字化けが直らないのです。当然これはバックエンドとして「unzip」を使用している「書庫マネージャー」(File-Roller)でも起こります。
対処法としては「unzip」のソースを書き換えて文字コードを変換する機能を無効にする等があるようですが、自分には些か敷居が高いです(´・ω・`)
色々考えた末に「unzip」の問題なのだから「unzip」以外でzipファイルを解凍すればいいことに気づきました。そこで最初に「p7zip-full」を試してみましたがやはり上手く生きません。更に色々と調べてようやくたどり着いたのが、jarコマンドを使う方法です。
jarはJavaARchiveと言ってJava環境で使用されるファイル形式ですが、実際はzipファイルです。
Debian5.0 (Lenny)ではJava環境があらかじめインストールされているのでjarコマンドをそのまま使用することが出来ます。

$ jar xvf zipファイルを指定

解凍後に $ convmv -r -f sjis -t utf8 ディレクトリをフルパスで指定 --notest で変換

以上で見事文字化けが直りました\(> <)/
この「unzip」による日本語ファイル名の不具合は周知の事実のようで、姉妹ディストリであるUbuntuでは既に「unzip」の修正版があるようです。zipファイルは普及率も高く使用する機会も多いのでDebianでも早く修正されることを期待しています。

0 件のコメント:

コメントを投稿