Mac製ZIPファイルの文字化け問題

会社員だった頃(いまも会社員なのかもしれないが😎)、デザイナーさんたちからzipファイルが添付されてきて、毎回文字化けのzipファイルになっていてがっかりする😱という事象がありました。最近はろくに仕事もしていないので、こういう場面に出くわすこともほぼありませんでした。

今日、1年ぶりくらいでこの事象に出くわしたので、ちょっと調べることにしました。

もう少し詳しく述べるなら、Macで作成されたzipファイルをWindowsUbuntuで展開すると、日本語のファイル名が「文字化け」するというトラブルです。OS側の問題っぽので、WSL内のUbuntuでunzipすればうまくいくんじゃないかなと思っていたのですが、アテが外れました😨

この事象、結論はZIPファイル内部で使われている文字コードの違いが原因です。


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

OS ファイル名の文字コード 備考
macOS UTF-8 仕様に準拠
Windowsエクスプローラーの標準展開機能) CP932(Shift_JIS系) UTF-8に未対応
Ubuntu(unzipコマンド) UTF-8 ただしmacOSの拡張形式(NFD)に弱い

macOSはZIPファイル内のファイル名をUTF-8(かつNFD正規化)で格納しています。

NFD正規化とは、文字を基底文字と結合文字に分解して表現する方式です。例えば「が」をNFCでは1文字(が)で表現しますが、NFDでは2文字(か+゛)に分解します。

macOSNFDを使い、WindowsLinuxNFCを使うため、この違いがZIPファイルの文字化けの原因にもなります。

  • Windows標準の解凍機能はUTF-8に対応していないため、Shift_JISとして誤って解釈 → 文字化け
  • UbuntuのunzipもNFD(濁点や長音などを分解する形式)をうまく扱えない場合があるそうです。

代表的な解決方法

1) Windowsの場合 7-Zipを使う(最も手軽)

7-ZipUTF-8に対応しているため、Macで作られたZIPも正しく展開できます。

👉 会社PCなどでインストールできない場合は、Portable版(インストール不要)もあります。

自分はPortable版の7-Zipをを使用していました。

7-zip.opensource.jp


2) Ubuntuの場合 unarコマンドを使う

unzipではなく unarを使うと、NFDも含めてかなり正確に展開できます。

# インストール方法
$ sudo apt update
$ sudo apt install unar
# 展開する場合
$ unar filename.zip

メリット


3) Macで再圧縮する(NFC対応したアプリで)

面倒ですが、先方にお願いするって話🙇


おわりに

Windowsに修正してほしいなと思うところは多いですが、もう正解なんてないんじゃないっすかね。もしあるとすれば、zipファイルを辞めることくらいしか?

個人的にはMac側のNFD変換は勘弁してほしいし、__MACOSXフォルダも…。

対応方法 対応環境 メリット
7-Zipで展開 Windows 最も手軽で確実
unarで展開 Linux/Ubuntu UTF-8/NFD対応

ちなみに、zip以外の他のアーカイブ方式ではどうかというと

  • tar.gz(tar + gzip … ファイル名をバイト列としてそのまま保存するため、UTF-8で作られたものはUTF-8として展開され、文字化けは発生しにくい。ただしNFD/NFCの問題は残ります。
  • 7z形式 … UTF-8をネイティブサポートしており、文字化けはほとんど発生しません。macOSWindows間でのファイル共有には最も推奨される形式の模様。
  • RAR形式 … 新しいバージョンではUTF-8対応しており、比較的安全。

みたいですね。


ちょっとしたTips?

実験してはいないですが、検索していると以下の記述がありました。

  • MacユーザにZIPを送ってもらう場合、「ターミナルで圧縮」するようお願いすると、余計なリソースフォーク(__MACOSXフォルダ)が入りにくくなります
  • zip -rで圧縮してもらうと、Windows側でのトラブルが減ります

という話。