🗜️

Debian 11(bulleye) でShift-JISエンコードされたZIPを展開する

2023/03/22に公開
2

前提

  • Debian 11 Bullseye
  • x86_64 (おそらくアーキテクチャに依存しないと思われる)

課題

  • 日本語ファイル名のファイルをShift-JISエンコードで作成されたZIPファイルをunzipで解凍すると日本語ファイル名が文字化けする。

unzipを使う場合

Linuxの場合

unzip -O sjis archive.zip

確かにこれは動く… Ubuntuなら。
Debian Bullseyeのunzipはバージョンが古く(6.00)このオプションが実装されていない。testingとかから持ってくれば更新されるかもしれないが、正直面倒。
ようするに、unzipを使う限り解決策がなさそう。

macOSの場合

macOS venturaの場合も、同様にunzipのバージョンが古いが、Homebrewで新しいものをインストールできる。

brew install unzip
(ここで、OSに含まれているユーティリティなので優先して使われるようにはしません。みたいな警告がでる)

/usr/local/opt/unzip/bin/unzip -O sjis archive.zip

p7zipを使う

別案として、p7zip(7zip)を使用するという手段がある。
p7zipとp7zip-fullがあるが、特に何も考えずにp7zip-fullを選択すれば良い。

sudo apt install p7zip-full
7z x archive.zip

当方の環境では、localeに en_US.UTF-8 を指定しているが、Shift−JISを自動判定して展開してくれた。7zコマンドのバージョン等は以下の通り

p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Xeon(R) CPU E3-1265L V2 @ 2.50GHz (306A9),ASM,AES-NI)

ちなみに、macOSの場合も Homebrewで p7zip をインストールすることができる。(-fullはないが、おそらくfull相当と思われる)

Discussion

Hideki YamaneHideki Yamane

Debian Bullseyeのunzipはバージョンが古く(6.00)このオプションが実装されていない

これは誤りです。Ubuntuのunzipパッケージにはshift-jis対応のパッチが入っているが、DebianのUnzipパッケージにはそのようなパッチが適用されていないから、になります。古いからではありません。また、そのようなパッチを適用できないか?についてはDebianのUnzipパッケージのメンテナから拒否されています。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=483290

Yakumo SakiYakumo Saki

ご指摘ありがとうございます!
そんな深い事情があるとは知りませんでした。本文はあとで修正します。