TECH NOTES / 05
Mac で作った ZIP は、今も Windows で文字化けする
Mac の Finder で圧縮した ZIP を Windows の相手に送ると、日本語のファイル名が化ける。昔からある話ですが、Windows 11 になった今も直っていません。そして、原因は Windows ではなく Mac の側にあります。
原因は2つある
1. 「このファイル名は UTF-8 です」という印が付かない。
ZIP には、ファイル名の文字コードが UTF-8 であることを示す印(フラグ)があります。macOS 標準の圧縮(Finder の「圧縮」や ditto)は、ファイル名を UTF-8 で書きながら、この印を立てません。印の無いファイル名を、日本語の Windows は Shift_JIS として読みます。だから化けます。
印さえ付いていれば、Windows は 2012 年ごろの修正以降、正しく読めます。Windows 11(24H2)でも、印の無い ZIP は化けます。非は、印を付けない Mac の側にあります。
2. 濁点が分かれた形で書かれている。
macOS は、「が」を「か」と「゛」の2文字に分けた形(NFD)でファイル名を持っていることがあります。印を付けても、この形のままだと、Windows では濁点が離れて表示されたり、別の名前として扱われたりします。こちらは、1文字にまとめた形(NFC)に変換する必要があります。
道具で解決する場合
Mac から Windows 向けの ZIP を作る定番のソフトに「MacWinZipper」があります。App Store では「WinArchiver」という名前で出ていますが、この2つは同じソフトです(株式会社ティダ)。App Store では MacWinZipper の名前が使えなかったための別名です。
- App Store 版(WinArchiver)は提供が止まっていて、Intel 専用の古い版のままです。
- 公式サイト版(MacWinZipper)は更新が続いていて、Apple Silicon にも対応しています。入れるなら、こちらです。
- Windows 向けに圧縮するだけなら、無料版で足ります。
アプリの「情報」画面に「Rosetta を使用して開く」というチェックが出ていても、Apple Silicon に対応していないという意味ではありません。このチェックは、Intel と Apple Silicon の両方に対応したアプリにだけ出ます。
自分で直す場合の要点
Python の標準の zipfile を使うと、ファイル名に英数字以外が含まれる場合、UTF-8 の印は自動で付きます。あとは、ファイル名を NFC に変換してから書き込めば、ほぼ足ります。
import unicodedata, zipfile
name = unicodedata.normalize("NFC", name)
z.write(path, arcname=name)
あわせて気をつけること:
- Windows で使えないファイル名がある。
\ / : * ? " < > |を含む名前、末尾が点や空白の名前、CONやNULなどの予約名、長すぎるパス。Mac では作れても、Windows では展開できません。 - パスワード付きにするなら、方式に注意する。Windows のエクスプローラーで開けるのは、古い方式(ZipCrypto)だけです。AES 方式は、エクスプローラーでは開けません。
- 相手が古い解凍ソフトを使っている場合だけは、ファイル名を Shift_JIS で書く必要があります。今はまれです。
なぜ今も起きるのか
Mac の Finder で圧縮しても、Mac で展開すれば何の問題もありません。化けるのは相手の Windows の画面の上で、送った側は気づきません。相手が「ファイル名が化けている」と言ってきて、初めて分かります。言ってこなければ、化けたまま使われています。
2026年9月時点の macOS・Windows 11(24H2)・MacWinZipper 2.7.2 で確認した内容です。
TECH NOTES の記事は、筆者の実務と検証にもとづく記録です。お使いの環境やアプリケーションのバージョンによって結果が異なるため、記載内容について当社は責任を負いかねます。スクリプトを試すときは、必ず複製したデータで行ってください。