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側でのトラブルが減ります

という話。

自分用pandasを使うためのチートシート

最近、pandasを使うことが増えてきたので、自分用にチートシート作成します🫡

pandasは、プログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリである。特に、数表および時系列データを操作するためのデータ構造と演算を提供する。PandasはBSDライセンスのもとで提供されている。Wikipediaより引用

公式サイト

pandas.pydata.org

公式のチートシート

本家のチートシート

続きを読む

【WSL連携術】Windows×WSL最適化!ディレクトリショートカット作成とZone.Identifier問題の解決法

Windows Subsystem for Linux(WSL)を使った開発は便利ですが、Windows⇔WSL間のファイル操作には特有の課題があります。知らないとかなり面倒なのです。

今回は、WSL開発を快適にするテクニックとそれにまつわるトラブルの解決方法について紹介します。

  1. WSLディレクトリへのショートカット作成 - エクスプローラーから瞬時にアクセス(多分これはみんな思いつく🫡)
  2. Zone.Identifierファイル問題の解決 - ファイルコピー時に生成される謎のファイルを撲滅(何だこりゃ問題💦)

これらのテクニックを実装することで、Windows×WSLの連携が劇的に改善されます!

続きを読む

AdSenseのダッシュボードを見に行かなくてOK!GASで自動通知する方法

Google Apps Script(以降GAS)を使って、Google AdSense(以降AdSense)の当日収益をGmailで通知してみました。AdSenseのページに行けばダッシュボードでも見れますが、それも面倒だなと思って作ったスクリプトになります。これの利点は無料の1点です。バッチ的処理も、GASを使えば無料で使えます。API関連のバッチ処理であれば、かなりのことができるのは頼もしいです😎

続きを読む

【実践】PythonとOpenStreetMapで学ぶ経路システム開発入門

前回はGoogle Map APIを使用して開発を行いましたが、今回はOpenStreetMapを使用した似たようなことにチャレンジしてみようと思います。Pythonを使ってOpenStreetMapの経路検索URLを生成する方法ことを目的とします。

参考

uepon.hatenadiary.com

オープンストリートマップ(OpenStreetMap)とは?

オープンストリートマップ(英語: OpenStreetMapOSM)は、自由に利用でき、なおかつ編集機能のある世界地図を作るオープンコラボレーションプロジェクトである。GPS機能を持った携帯機器、空中写真、衛星画像、他の地理情報システムからのデータをもとに作られていくのが基本だが、編集ツール上で道1本から手入力での追加も可能である。与えられた画像とベクトルデータセットはオープンデータベースライセンス(ODbL)1.0のもと再利用可能である

上記出典

オープンストリートマップ - Wikipedia

www.openstreetmap.org

商用・非商用を問わずにデータの自由な利用と再配布が行えるのでいいですね😊

続きを読む