MacとWindowsでZIPファイルを共有するとき、ここに注意しないと文字化けのリスクが

はじめに

「同僚からもらったZIPを展開したら、ファイル名がなんだか変な文字の羅列になっていた……」

そんな経験、ありませんか?

MacとWindowsが混在している職場では、ZIPファイルのやり取りでファイル名が文字化けすることが今でもよく起きます。「昔の話でしょ?」と思いがちですが、実は現代の環境でも普通に発生します。

この記事では、なぜ文字化けするのか・どんなパターンがあるのか・どう対策すればいいのかを、わかりやすく解説していきます。

そもそもなぜ文字化けするの?

根本的な原因は、ZIPフォーマット自体に「文字コードを明示する仕様がなかった」ことです。

ファイルのデータ本体は問題ありません。問題になるのはファイル名の部分です。ZIPを作ったOS・ソフトが「自分のルールで」文字コードを格納し、展開するOS・ソフトも「自分のルールで」解釈します。この組み合わせがズレたとき、文字化けが発生します。

🔑 ポイント
ZIPファイルは「ファイル名の文字コード」を指定する仕組みがもともとなかったため、作ったOS・展開するOSの組み合わせによって文字化けが起きます。

よく起きる3つのパターン

文字化けが起きやすいパターンは大きく3つあります。

【パターン1】WindowsのZIPをMacで展開する

Windowsは日本語のファイル名をShift-JISという文字コードで格納します。一方、MacはUTF-8で解釈しようとします。このコードの食い違いが文字化けの原因です。

展開後のファイル名が「繝輔ぉ繝ォ繝€蜷・」のような謎の文字列になっていたら、このパターンです。

【パターン2】MacのZIPをWindowsで展開する

Macは濁点のある文字(「が」「ぱ」など)をNFDという形式で分解して格納します(「が」を「か」+「゛」のように)。Windowsはこの分解形式をうまく処理できないため、濁点が分離したり文字化けしたりします。

【パターン3】Mac同士でも起きることがある

macOS標準の「アーカイブユーティリティ」でZIPを作ると、濁点をNFD形式で格納します。別の展開アプリや異なるバージョンのmacOSで展開すると、濁点の扱いがズレて文字化けすることがあります。

ZIP規格はどう対応した?

この問題を解消するため、ZIP規格(PKWARE)は後からUTF-8フラグという仕組みを追加しました。ZIPファイルにUTF-8フラグを立てておくことで、展開側が「このファイル名はUTF-8で書かれている」と正しく判断できるようになりました。

ただし、Windowsの古いエクスプローラーはこのフラグを長年無視していたため、互換性の問題が残り続けました。現在は改善されていますが、環境によってはまだ完全ではないケースもあります。

対策:これをやっておけばOK

実用的な対策は3つです。

【対策1】Macで展開するなら「The Unarchiver」を使う

Mac App Storeで無料で入手できるアプリです。Shift-JISを自動で検出して正しく展開してくれるため、WindowsのZIPを開くときの文字化けをほぼ解消できます。Macを使っているなら入れておいて損はありません。

【対策2】MacでZIPを作るなら「Keka」を使う

こちらもMac App Storeで入手できるアプリです。UTF-8フラグを正しく立ててZIPを作成できるため、Windows側で展開しても文字化けが起きにくくなります。

【対策3】ファイル名を英数字にする

そもそも日本語ファイル名を使わなければ、文字化けは起きません。Mac・Windows間でZIPをやり取りする機会が多い場合は、ファイル名を英数字やアンダーバーだけで統一するのが一番確実な方法です。

📌 まとめると
・WindowsのZIPをMacで展開 → The Unarchiverを使う
・MacのZIPをWindowsに渡す → KekaでZIPを作る
・確実に防ぎたい → ファイル名を英数字に統一

まとめ

MacとWindows間のZIPファイルの文字化けは、ZIPフォーマットの「文字コード指定がない」という仕様上の問題が根本原因でした。

現代のアプリや規格で改善が進んでいるとはいえ、環境の組み合わせによっては今でも普通に起きます。

職場でMacとWindowsが混在している方は、ぜひThe UnarchiverとKekaを入れておくことをおすすめします。ちょっとした準備をしておくだけで、「ファイル名が読めない!」というプチストレスをまるごと防ぐことができます。

ぜひ参考にしてみてください😊

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする