ZIPを展開するとファイル名だけ文字化けする理由

文字化け・文字コードのコラム

受け取ったZIPを展開したら、ファイル名が読めない文字列になっていた。
開いてみると中身は正常で、名前だけが化けている。

ファイルが壊れているわけではありません。ZIPの仕様に由来する現象です。

ZIPはファイル名の文字コードを記録していない

ZIPが作られた当時の仕様では、ファイル名は作った環境の文字コードでそのまま書き込まれます。
日本語WindowsならShift_JIS、macOSやLinuxならUTF-8です。

問題は、ZIPの中に「このファイル名は何の文字コードか」という情報が入っていないことです。
展開する側は、自分の環境の文字コードだろうと仮定して読みます。

Windowsで作ったZIPをmacOSで展開すると、Shift_JISで書かれた名前をUTF-8として読むことになり、化けます。
逆に、macOSで作ったZIPを古いWindowsの環境で展開しても同じことが起きます。

後から、UTF-8で書いたことを示す目印を立てる仕様が追加されました。
対応したツール同士であれば化けません。ただし、標準機能で作られたZIPにはこの目印が付かないことがあります。

中身は影響を受けない

ファイル名が化けていても、中身のファイルは無事です。
ZIPの中では、ファイル名を書く場所と中身を格納する場所が分かれているためです。

化けた名前のまま開いて中身が読めるなら、実害はありません。
名前が必要な場合だけ、次の対処になります。

対処は展開する側で行う

展開ツールに文字コードを指定できるものを使います。
解凍ソフトの多くは設定を持っており、Shift_JISとUTF-8を切り替えられます。

Windowsの標準の展開機能には、この設定がありません。
標準機能で開いて化けた場合は、設定を持つツールで開き直すことになります。

作る側で避けたいなら、ファイル名を英数字にしておくのが確実です。
環境をまたぐ受け渡しでは、日本語のファイル名は避けたほうが結果的に楽です。

手で直すか、展開し直すか

化けた名前を手でリネームして済ませることもできます。
ただし、これが現実的なのはファイルが数個までです。

数十個入っているZIPで全部リネームするより、文字コードを指定できるツールで展開し直すほうが早く、間違いも起きません。
元の名前が推測できない場合は、そもそも手では直せません。

なお、同じ問題はメールの添付ファイル名でも起きます。
送信側と受信側でファイル名の扱いが違うと、届いた時点で名前が化けます。ZIPに限った話ではありません。ファイル名を環境をまたいで運ぶとき全般に起きます。

中身のほうが化けている場合は別の問題

ここまでは「ファイル名だけ」が化けているケースです。

展開したテキストファイルを開いて、中身のほうが化けているなら、それはファイルの文字コードの問題です。
そちらは変換で直ります。ファイル名の化けとは原因が別なので、混同しないほうが早く解決します。

ファイルの文字コードをブラウザ内で変換

MojiRescueなら、ファイルをドロップするだけで文字コード・BOM・改行コードを変換できます。ファイルは外部に送信されません。

ツールを使う