toolkit

ZIPの文字化けしたファイル名を修復

不要ファイルを削除
準備完了

「Windowsで作ったZIPをMacで開くとファイル名が文字化けする」「Macで作ったZIPがWindowsで文字化けする」。そうしたZIP、つまり日本語、中国語、韓国語、キリル文字、アクセント付き文字の名前があるべき場所に豆腐(□)や意味不明な記号、アクセント付きの文字が並んでいるZIPをドロップすると、このブラウザのタブ内で書き直され、すべての名前が再び読めるようになります。何もアップロードされません。アーカイブの読み取りと再構築はすべてお使いの端末上で行われ、中のファイルはバイト単位でそのままコピーされます。

ZIPのファイル名が文字化けする理由

ZIP形式には、ファイル名がどの文字コードで書かれているかを示すフィールドがありません。Windowsのエクスプローラーは、そのマシンが使っている古いコードページでファイル名を保存します。日本語版WindowsならShift_JIS、中国語版ならGBK、韓国語版ならEUC-KR、ロシア語版とウクライナ語版ならCP866、西ヨーロッパの多くではCP850です。しかもフラグは立てません。Mac、スマートフォン、あるいは別の言語に設定されたWindows PCは推測するしかなく、推測を誤ります。逆方向でも起きます。macOSはフラグなしでUTF-8の名前を書き込み、日本語版WindowsはそれをShift_JISとして読んでしまいます。どちらの場合もバイト列は無傷で、解釈だけが間違っています。だからこそ名前を復元できるのです。

修復の仕組み

アーカイブ内のすべての名前を読み取ります。すでに正しいUTF-8である名前はそのまま維持します。残りについては、Windowsが実際に書き込むコードページを順番に試し、制御文字、罫線素片、半角カタカナではなく、もっともらしい単語になるかどうかで採点します。判定はアーカイブ全体で1つなので、短くて曖昧な名前も、周囲の名前が与える確かさに従います。その後、名前はUTF-8フラグを立てたUTF-8として書き戻されます。この形式はWindows 10と11、macOS、Linux、iOS、Android、7-Zipのすべてが正しく読み取ります。

自動判定が間違う場合

繁体字中国語と簡体字中国語はバイト列の互換性が高く、Big5のアーカイブがGBKとして読めてしまうことがあります。また、どの文字体系でも非常に短い名前は複数のコードページに当てはまる場合があります。ドロップダウンでコードページを自分で指定できるので、そのZIPを作ったWindowsに合うものを選んでください。自動判定がどのコードページにも当てはめられなかった名前は、黙って推測されるのではなく、結果に報告されます。

不要ファイルの削除(任意)

MacとWindows PCの間を行き来したZIPには、文字化けした名前に加えて__MACOSXフォルダや「.DS_Store」ファイルが入っていることがよくあります。そのため、ZIP整理ツールと同じフィルターをここにも用意し、この2つを既定でオンにしています。それ以外はアーカイブに手を付けたくない場合はチェックを外してください。ファイル名の修復はどちらにしても実行されます。

変わらないもの

ファイルの内容はバイト単位でそのままコピーされます。解凍も再圧縮もありません。フォルダ構造とタイムスタンプは保持され、パスワード付きのエントリはパスワードなしでは中を調べられないため、そのままコピーされます。書き直されるのは名前だけです。

よくある質問

ZIPはどこかにアップロードされますか?

いいえ。アーカイブの読み取り、名前のデコード、ZIPの書き直しはWebAssemblyによってブラウザ内で行われ、ファイル本体も中身の一覧もお使いのデバイスから出ません。

日本語版Windowsで作ったZIPは直せますか?

はい。それが最も多いケースです。日本語版Windowsのエクスプローラーは名前をShift_JIS(コードページ932)で保存するため、macOSや日本語以外のWindowsでは文字化けして表示されます。修復ではこれを検出し、名前をUTF-8に書き直します。

Macで作ったZIPがWindowsで文字化けします。これで直りますか?

はい。macOSはUTF-8の名前を書き込みますが、UTF-8フラグを立てないため、Windowsは自分のコードページで読んでしまいます。ここでアーカイブを処理するとフラグが立ち、その後はWindowsでも名前が正しく表示されます。

別のツールですでに壊れてしまった名前も復元できますか?

元のバイト列がまだアーカイブに残っている場合に限ります。間違った名前のまま解凍してから再圧縮したZIPでは、文字化けした文字列が正規のUTF-8として保存されており、意図した名前と区別がつきません。これを元に戻す手段はありません。

中のファイルは変わりますか?

いいえ。すべてのエントリはバイト単位で無変更のままコピーされます。書き直されるのは名前だけで、それ以外に変わるのは削除対象としてチェックを残した不要ファイルだけです。

ZIPがどのコードページを使っているか分からない場合は?

ドロップダウンを自動判定のままにしてください。それでも結果がおかしい場合は、そのZIPを作ったパソコンの言語に対応する項目を選びます。結果には、いくつの名前がどのコードページで書き直されたかが表示されます。