2015年6月13日土曜日

Zip の憂鬱。(1)文字化け、時々コードページエラー。そして、解決した。


基本は、ターミナルで展開するか、WINEでWindowsのフリーツール使うほうが速くていいかもしれません。3年前に書いた記事ですが、うまくいっていたんですよ。はい。

参考:マウスやコマンドライン・ターミナルでの操作


    などもおすすめです。

    Zip:文字化けと正しく向き合う。冗長な序論

    zipをLinux上にもってくると化けてしまう。――Windowsとのやりとり(なんと現代でもです)やDOS、OS/2全盛期(20年前です)のアーカイブでどうしても解凍時化けてしまうzip形式アーカイブファイルがあります。エラーのたまに解凍すらできない場合もあります。私の場合、それは東ヨーロッパ言語であったり、シフトJISであったりします。ロシア語でもそうですし、スペイン語のスペシャルキャラクターでも同様です。ギリシャ語も化けますね。詳細はわかりませんが、GBでも化けるコードページがあるようです。英語なのに。

    自分の場合は、シフトJISがらみです。Windows シフトJISがなぜかいまだに主流なので、そのせいですね。過去のShift_JISのしがらみに僕らは縛られています。日本政府はシフトJIS撲滅に動き、ユニコードへの道を適切に開くべきです。ローカル過ぎる文字コードを利用しつづけるのは「いかがなものか」なのです。技術論なんてどうでもいいのです。

    さて、ターミナルエミュレータで処理できればいいのですが、左手を怪我している時はキーボードなしで操作したい。だらだら操作している時はGUIアプリで要するに処理したいわけです。本稿はいきなりGUI操作、そこまでは書きません。ターミナルから当該処理をすこしづつ改善していった自分の経緯を記録したいからです。


    さて、あと何十年たてば、このくだらない悲しみから、逃れることができるでしょうか。


    (補足)
    • ネットで流通しているファイル形式で忘れてならない形式にRARがあります。rar は優れていて、Windows下でシフトJISファイル名でパッキングしても、LinuxやMAC OS X(たぶん)で化けることはありません。ファイル名コードページの格納のことを考えているからだと思います。つまり、zipさえ対策すれば事実上アーカイバーの文字化けに悩むことから日本人Linuxユーザーは開放されることになります。
    • 逆の状況はどうなのか? と疑問を持つ人もいるでしょう。つまり、UTF-8ファイル名を格納したアーカイブをWindows7にメール送付なりした場合です。zipはWindows標準サポートです。もちろん化けます。化けますが化けません。先日検索していたら、マイクロソフトから公式なパッチが出ていました。それがあたっていれば、UTF-8 ZIPの文字化けはWindowsでは生じません。その上、Windowsの日本のユーザーの多く(特に個人ユーザー)は、ほぼ間違いなく(よりどりみどりの)サードパーティのアーカイバーを利用しているはずで、それらは考えられているのか? 文字化けしません(ちょっと試した範囲ですが)。きっとOS標準のバグだったものに気がついていない人が多いと思います。検索結果からそう判断しました。MACの人も同じ悩みはもっています。
    それ find で!! コマンド1つで、全圧縮形式を解凍する。混沌を求めて。unar unp

    トラディショナルにコマンドラインで攻めてみる。

    unzip コードページ指定

    unzip -Ocp932 file.zip


    たとえば、zshなら、~/.zshrc に

    alias unzipj="unzip -Oshiftjis"
    #alias unzip932="unar $1"

    とでもしておくと、Windowsユーザーが作ったシフトJISなZIPアーカイブが、
    unzipj というコマンドで解凍できます。-lつけるとリスト表示。

    2行目は後述unarです。実はこちらのほうがよく動くのでおすすめだったりします。MAC由来のようです。

    コマンドライン解凍。コードページを指定しているだけです。(cp932としたほうがいい気がします。根拠はありません。このツールでは等価なのかもしれない)

    汎用解凍兵器 unar


    多様な圧縮フォーマットに対応した汎用兵器であるunar(4文字です。not unrar) OS Xの世界の発祥っぽい。

    unar file.zip

    sudo apt-get install unar
    (導入。lsar も同時にインストールされます)

    とても使い方が簡単です。オプションなしでほぼ希望通りです。いまんとこ高精度でコードページを自動判別しています。unrarではありません。だいじなことなので2回言いました。

     2015年6月13日現在、1.8.1が最新です。さきほどコンパイルしてみたら、なぜか (unzipコードページ指定でも化けているせいで解凍できない)不具合zipが綺麗に処理できるようになりました。

    そのうち unar lsar 1.8.1をストレージ倉庫においておきます。

    アメリカ人が好きそうな雑食性万能ツール upnunp

    間違えて長いことupn と記述していました。

    sudo apt-get install unp

    unp file.zip

    sudo apt-get install unp
    (導入)

    ヘルプ
    unp --help

    これも便利なスクリプトです。万能解凍スクリプトです。適切なバイナリが導入されれていれば(最近のLinuxディストリビューションではそうですね)、そのまま使えます。なんでも食います。専用スパナでなくモンキーレンチというイメージです。


    僕の場合1行書き換えて使うと便利なunp。どんなアーカイブフォーマットもこのスクリプトに食わせてやればだいじょうぶというコマンドです。unarはバイナリですが、こちらはPerlで書かれた正統?なツールのフロントエンドスクリプトです。

    更新  (unzipのバージョンを確認) 

    unzipは、-Oオプションが有効なものであれば使えます。 ubuntuやmintなどの日本語チーム推奨パッケージをいれていれば自動的にはいっていると思います。以下のヘルプが見つかればOKです。目視でもよいですが。


    次の行をターミナルに切り貼り。Enter。
     
    unzip | grep -P 'O CHARSET.*?DOS.*?OS\/2'

    -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
    という表示がヘルプに見つかれば対応バージョンです。

    以上で判別できたのは昔の話で、最近では日本語化をほどこさなくても、当該オプションのあるunzipが導入されている気がします。日本チームの方々が作成していたいだいているのは、たとえば、

    unzip_6.0-10~5.52~ja2_amd64.deb 

    です。差異については調べていません。jaリポジトリを有効にするとanthyなどが仲間になりたがります。当方では、それを避けたいので有効にしなくなりました。


    第1回まとめ


    ここまでで、ターミナルでのシフトJIS ZIPの文字化けが正しく扱えるようになりました。1日1個程度のやりとりならこれで困ることはないでしょうね。

    次回は、以上を踏まえ「nemo/caja/nautilusの右クリックに組み込みたい」及び「さらにGUIで安直に操作してみたいよね」です。

    え?!  なんですって。
    「WINEでいいんじゃね?」
    はい、解散、解散。

    追記 GUIツール(実質の第2回)

    14.04.2 + Cinnamon(Nightly build) で、Zip文字化けを確認するためのテストファイルを探す。
    http://www.hosino-kanata.com/kakusi/bjy/bjy.zip
    (作者がフリーにされました。「ブラックジャックによろしく」)。手持ちに文字化けするZipファイルがあればそれで確認してみればよいです。これはファイルが300MBと大きめです。


    • アーカイブマネージャ、文字化け。☓
    • Engrampa書庫マネージャ、文字化け。☓
    • Xarchiver 文字化けしない。 ○

    (騙されたと思って)Xarchiverを入れてみるといいかもしれません。少し動作が鈍いですが、文字化けせずに日本語ファイル名が解凍できています。誤報、下部に説明。 


    ▲上から、Xarchiver , アーカイブマネージャ、Engrampa書庫マネージャ


    Wineの場合 - Explzh for Windows 日本人でWINEなら個人的オススメ、使いやすいです。生Windowsでもオススメ。


    (騙されたと思ってと書いたのは、別の区画からたちあげたバージョンの違うubuntuではうまくいかないから。それと一時Xarchiverの ソースをいじってコンパイルしたのを入れて文字化けが治ったことがあって、ただし動作が変になったのでレストアしたはずだったりとか、よく覚えないことが ありまして、……ちゃんと確認していません。)
    追記:やっぱり特定環境でしか再現しないので、自分であてたパッチでコンパイルした結果、コードページ処理が有効になっていますね。ソースは整理していないので、どれがどれやらわかりません。コマンドで解凍するほうが楽なので、長期放置。

    tt(The Trusty Tahr)はこの0.5.2で、vv,ww,xxでは、0.5.4がインストールされると思います。 https://launchpad.net/ubuntu/+source/xarchiver