読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

Shift_JIS のファイル名を含む zip ファイルを GNU や UNIX 上で UTF-8 で復元するには

未だに、 Windows 上でアーカイブされた zip ファイルには、 Shift_JIS (CP932) のファイル名を含んでいることがあります。

テキストファイルの中身を変換したいときには、例えば nkf を用いれば可能です。 ($ nkf -S -w --overwrite [filename])

それに対して、ファイル名そのものが Shift_JIS になっているときは、ファイル名を UTF-8 に変換するのには厄介です。

選択肢

  1. 復元後のファイルを convmv で変換する
    • $ convmv -f shiftjis -t utf8 [filename]
  2. unar で復元する
  3. natspec を組み込んだ unzip で復元する

以上がありますが、 convmv ではうまくいかず、ぐちゃぐちゃになることがあります。

unar は、 Object C で書かれており、 Object C のコンパイラが必要です。

パッケージの多いディストリビューションでは unar は入っているでしょうし、 入っていなくても、バイナリベースのディストリビューションの多くは GCC (GNU Compiler Collection) の Object C コンパイラをコマンド1つでインストール可能でしょうから、そこからビルドすればよいでしょう。

しかし、Gentoo では GCC から再ビルドすることになるかもしれません。

Gentoo では、natspec を有効にした unzip をビルドするのが早いです。

$ echo 'app-arch/unzip natspec' | sudo tee -a /etc/portage/package.use
$ echo 'dev-libs/libnatspec -python' | sudo tee -a /etc/portage/package.use
$ sudo emerge -avt app-arch/unzip

それでも dependencydev-libs/popt がありますが、インストールはすぐ終わるはずです。

unzipShift_JIS 対応になると、 unzip のフロントエンドとして動作する( fileroller や xarchiver のような)各種 GUI アーカイブマネージャでも Shift_JIS ファイル名を処理可能になります。