🗜️
Debian 11(bulleye) でShift-JISエンコードされたZIPを展開する
前提
- 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
これは誤りです。Ubuntuのunzipパッケージにはshift-jis対応のパッチが入っているが、DebianのUnzipパッケージにはそのようなパッチが適用されていないから、になります。古いからではありません。また、そのようなパッチを適用できないか?についてはDebianのUnzipパッケージのメンテナから拒否されています。
ご指摘ありがとうございます!
そんな深い事情があるとは知りませんでした。本文はあとで修正します。