手軽屋
ツール一覧

ZIP解凍の文字化けを完全に直す手順(Shift_JIS/UTF-8切替)

MDN TextDecoder(Baseline 2015-07)+WHATWG Encoding Standardに基づく解説。

そもそもなぜ文字化けが起きるのか

ZIPは1989年にPKWAREのPhil Katzが作ったときから「ファイル名はOS依存の8ビット文字列として記録する」仕様でした。WindowsはShift_JIS、Macは古くからUTF-8、Linuxは環境変数依存です。結果としてWindowsのZIPをMacで開くと、Shift_JISのバイト列をUTF-8として解釈して文字化けします。

代表的な文字化けパターン

仕様:bit 11(UTF-8フラグ)の役割

2006年のPKWARE APPNOTE v6.3.0で「general purpose bit flag」のbit 11に「Language Encoding Flag (EFS)」が追加されました。このビットが立っていればファイル名はUTF-8で記録されていることを意味します。立っていなければShift_JIS(日本語環境)またはCP-437(米国環境)と推測する必要があります。

本ツールはMDN DataViewgetUint16(offset, true)(リトルエンディアン)でこのフラグを読み取り、UTF-8 / Shift_JISを判定します。

手動で切り替える手順

  1. ZIPを読み込み、ファイル一覧を表示。
  2. 文字化けしている場合は『日本語ZIP(Shift_JIS)』ボタンを押す。
  3. 逆にShift_JIS解釈が間違っていれば『標準(UTF-8)』ボタンに切替。
  4. 正しい表示になったら、ファイルを選んで取り出す。

自動判定の仕組み

本ツールはbit 11フラグを優先し、立っていない場合はShift_JISとUTF-8の両方でデコードして、U+FFFD(置換文字)の出現数が少ない方を採用します。WHATWG Encoding Standardの new TextDecoder("shift-jis", { fatal: false }) はChrome/Firefox/Safari全てで実装済み(Baseline 2015-07)。

Windows 11以降の改善

Windows 11(特に2022年以降のリリース)ではエクスプローラーで作るZIPのbit 11がデフォルトで立つようになりつつあり、文字化けは将来的に減ります。ただし古い圧縮ソフト(7-Zip旧版・LhaPlus等)で作られたZIPはShift_JISのままなので、当面は文字化け対応が必須です。

よくある質問

Q. 文字化けを直すと中身も壊れますか?

A. いいえ。文字化けはファイル名の解釈だけの問題で、ファイル本体(中身のバイト列)は無傷です。本ツールはファイル名のデコード方式を切り替えるだけで、中身は元のまま展開します。

Q. 「縺」が出るのはなぜ?

A. Shift_JISの「あ」(0x82 0xA0)をUTF-8として解釈すると、E3 81 82 → U+3041 ぁ(最初の3バイト)になります。Shift_JIS第1バイト0x82は3バイトUTF-8シーケンスの開始位置に近く、「縺」「ぁ」「ぇ」などひらがな付近の文字が現れやすい構造です。

Q. 手動切替で直らない場合は?

A. CP-437(米国向け古いZIP)やEUC-JPなど、Shift_JIS/UTF-8以外の可能性があります。元のZIP作成者にUTF-8で作り直してもらうのが確実です。

関連