macで送ったZIPファイルを解凍しても、文字化けなし、__MACOSフォルダはない、テキストもしっかり改行しています。
それなのにこんな問い合わせ受けたことありませんか?
- ZIPファイルが文字化けしていて読めないとクラアントさんからクレームを受けた
- __MACOSXフォルダは何の意味があるの?と問い合わせを受けた
- もらったZIPファイルをすべて展開すると予期しないエラーになって解凍できない
- テキストファイルが詰まっていて読みにくい。
macOSでは全く問題ないのになぜ?
メールで送ると文字化けしちゃうの!?
これ全部macOS特有の問題です。問い合わせたクラアントさんが正しいです。
クライアントさんの環境がWindowsの場合、文字化けや解凍できないなどの問題が発生します。
macOSには、フォルダやファイルを右クリック(2本指でタップ)するとZIP形式の圧縮ができる機能が備わっています。
フォルダを対象した圧縮ファイルを作成したZIPファイルをクライアントさんへ送っていませんか?
__MACOSXフォルダが作られています。日本語が含まれるファイルはWindowsで文字化けします。
ターミナルから以下コマンドでWindowsのエクスプローラーで見える__MACOSXフォルダの存在がわかります。
$ unzip -l zipファイル名
(圧縮ファイルの中に日本語があると???などの表記になります)
当ページで、macでWindowsユーザーへ送っても困らない圧縮ファイルの作成方法がわかります。
この記事でご紹介しているwindowszipプログラムはmacOS Catalina以降では動作しません。
$ ./local/bin/windowszip ./a.html
Fatal error: Uncaught Error: Class 'ZipArchive' not found in /Users/macyarounanoka/local/bin/windowszip:128
Stack trace:
#0 /Users/macyarounanoka/local/bin/windowszip(150): WindowsZip->Create('./a.html')
#1 {main}
thrown in /Users/macyarounanoka/local/bin/windowszip on line 128
理由:phpを利用しています。phpのZipArchiveがmacOS Catalinaでは標準利用できなくなりました。このため、記事でご紹介しているwindowszipプログラムが失敗します。
対策はあります。ただmacOS標準で利用するという前提が崩れます。
対策案1:brew経由でインストールできるphp7.3を使う
https://stackoverflow.com/questions/58618138/macos-catalina-class-ziparchive-not-found
ただ、Windows10側でなんとかしたい場合もあるかと思います。次の方法を試すことで文字化けしない解凍ができます。
Windows10側で文字化けしてしまうMacのZIPファイルをなんとかする方法3選
Windows10の標準解凍ツールで文字化けしてしまう方は、以下2つのフリーソフトどちらかで対応できます。
方法1フリーソフトhttp://www.cube-soft.jp/cubeice/ CubeICE 最新版: 0.8.1β
方法2フリーソフトhttps://sevenzip.osdn.jp/ 7-Zip 最新版 7-Zip 16.04(2016-10-04)
方法3 Windows準標準 Bash on Ubuntu on Windowsのunzipコマンド
会社の都合上、個人PCにフリーソフトのインストールが許可されてないって方は、Bash on Ubuntu on Windowsのunzipコマンドを試してみてください。.DS_Store、__MACOSXフォルダも合わせて解凍されます。macOSのファイルシステムに必要な情報ファイルです。Windowsでは削除しても解凍した内容に全く影響ありません。
(Bash On Ubuntu on WIndowsインストール後、sudo apt install unzip でunzipコマンドをインストールできます。unzip ZIPファイル名.zipで解凍できます。)
ここからは、macユーザーがWindowsユーザーへ文字化けしないZIPファイルを作る方法です。
目次
- 1 ZIP問題の3つのポイント
- 2 macOSのZIPはこうあってほしいと思う5選
- 3 macのZip圧縮/解凍アプリは微妙に満足できなかったです
- 3−1 週刊アスキーでおすすめしていた「WinArchiver」は、日本語対応・テキストの改行など満足できませんでした。
- 3−2 @ITでおすすめしていた「ZIPANG」は、テキストの改行に満足できませんでした。
- 4 Windows10の圧縮は、.DS_storeが含まれる場合があります
- 5 mac標準機能でWindows互換のZIPファイルを作成する方法【日本語対応】
- 5−1 Finderでwindows互換のZIPを作るまでの手順
- 5−2 macOS Catalinaで動作させる手順
- 6 日本語を使っていないフォルダやファイルを圧縮するならzipコマンドが便利です。
- 7 ZIPの暗号化の方法と注意点
- 8 まとめ
ZIP問題の3つのポイント
同じZIP形式のファイルなのにWindowsから送られてきたZIPファイルはmacで正常に解凍できます。
macのFinderで作ったZIPファイルが送られてきたWindowsユーザーは困惑します。
__MACOSXフォルダが作られる、ファイル名が意味不明・・・
ポイント1:日本語が文字化けするのは、文字コードが違うから。Windowsの標準機能はSJISだけの対応
WindowsのエクスプローラーでサポートされいるZIPファイルの中身のファイル名は、
ASCII文字列、もしくはShift-JISだけです。
macOS、debian、UbuntuなどのLinux系OSで作られるZIPファイルの中身のファイル名は、
UTF-8です。マイナーOSはUTF-8で最先端です。
シェア91%を超えるWindowsが正しいと思います。
=>ZIPファイルの中身のファイル名はSJISが正解
Windows10 Pro Creators UpdateでこっそりLZHフォルダのサポートがなくなっていました。
今後はLZHで送るのはやめておいた方が無難かもしれませんね・・・
ポイント2:__MACOSXはmacOSシステムで必要とするから作られる
__MACOSXフォルダは、各ファイルの属性情報などが含まれています。
例えばテキストファイルの場合、作成に使ったmacアプリのバンドルID、文字コードなどです。
macでそのまま解凍した場合、__MACOSXフォルダは作られません。
解凍時、.DS_storeファイルにマージされているようです。
=>__MACOSXフォルダは、macOSのためのフォルダです。Windowsユーザーにとって不要なフォルダです。
ポインt3:Windowsで解凍できない、macOSで解凍できるは禁止文字が含まれていませんか?
macOSのHFS+ファイルシステムは、ファイル名に関して寛容です。
ファイル名に使えない文字は/以外ないと思います。
(Finderでフォルダやファイル名に/を入力することができます。ただ実際には、/は、:として保存されています)
一方、Windowsは、ファイル名に使えない文字があります。
¥/:*?"<>|が使えません。
これらWindowsで使ってはいけないファイル名を含んだファイル名が、ZIPファイルに含まれると解凍時にエラーが起きてしまいます。
=>Windowsで使ってはいけないファイル名は避ける
macOSのZIPはこうあってほしいと思う5選
macOSのZIPに望むことは、これに尽きます。
「WindowsのPCでしっかり解凍できてほしい」
macは、AES128bit,256bitの高度な暗号化で圧縮できるディスクイメージを作ることができます。
わざわざZIPファイルを作るのは、資料をまとめて渡したい場合が多いです。
相手の標準的な解凍プログラムで渡したものが解凍できれいいだけです。
Finderで作られたZIPファイルは、mac相手なら問題ありません。
- 望むこと1 ZIPファイルを受け取った相手に不信感を与えないようにしたい
- 望むこと2 __MACOSX、.DS_storeは不要なので圧縮しないでほしい
- 望むこと3 圧縮しても、日本語ファイルは日本語のままをキープしてほしい
- 望むこと4 テキストファイル(拡張子が.txt固定でもいいので)は、macの改行LFをWindowsの改行CRLFにしてほしい
- 望むこと5 ファイル名にWindowsの禁止文字が含まれていたら教えてほしい
macのZip圧縮/解凍アプリは微妙に満足できなかったです
ZIPファイルの圧縮アプリはApp Storeから入手することができます。
アプリで先ほどの「macOSのZIPに望むこと5選」が満足できたらよかったんですが、
微妙に対応していないところがありました。
週刊アスキーでおすすめしていた「WinArchiver」は、日本語対応・テキストの改行など満足できませんでした。
「WinArchiver Lite」は無料で利用できますが、広告が表示されます。
実行結果です。
【Goodポイント】
__MACOSXフォルダは作られない
Windowsファイルの禁止文字が含まれると除去してくれる
【Badポイント】
日本語ファイル名が「_」に変換される、意味不明なファイル名になる
改行コードはLFのまま。CRLF変換はあらかじめ処理しておく必要がある。
@ITでおすすめしていた「ZIPANG」は、テキストの改行に満足できませんでした。
日本語ファイルのフォルダをドロップすると日本語のままのZIPファイルを作成してくれます。
実行結果です
【Goodポイント】
__MACOSXフォルダは作られない
日本語ファイル名は日本語のまま。
【Badポイント】
ドロップしたフォルダの直下に圧縮ファイルが作られる
改行コードはLFのまま。CRLF変換はあらかじめ処理しておく必要がある。
Windowsで使えないファイル名が混じっていてもそのまま圧縮されてしまう。
Windows10の圧縮は、.DS_storeが含まれる場合があります
Parallelsで動かしているWindows10Proから圧縮しちゃえば楽勝!って気がつきました。
macユーザー全員がParallelsやVMwareなどを持っているわけではないですよね。
ParallelsやVMware Fusionをお持ちの方はこの方法がオススメです。
当然ですが、ParallelsやVMware Fusionで動作させている
Windows10Proから「macのフォルダ」を送る(N)>圧縮(zip 形式)のフォルダー操作でWindows100%互換のZIPファイルが作成できます。
1点注意事項があって、
圧縮したいフォルダ内に.DS_storeファイルが存在するとそのまま圧縮されます。
ZIPファイルを作った後、エクスプローラーで開いて、削除することができます。
当然禁止文字が含まれると圧縮できないってエラーになり、弾かれます。
ちなみに、Parallelsで動作しているWindowsはMacのHFS+ボリュームへアクセスすることができます。
その際、禁止文字が含まれるファイルをエクスプローラーで見ると、・になっています。
mac標準機能でWindows互換のZIPファイルを作成する方法【日本語対応】
ここからは、Windows環境のクラアント・顧客に不信感を与えないZIPファイルの作り方をmacの標準機能で作る方法をご紹介します。
mac標準機能でWindows互換のZIPファイルを作成する方法【日本語対応】の7つの約束
- 約束1 __MACOSXフォルダ作りません。
- 約束2 .DS_storeファイルは圧縮対象外です。
- 約束3 日本語ファイル、日本語フォルダはそのまま日本語です。
- 約束4 .txt拡張子は自動でWindows改行(CRLF)に変換して圧縮します。
- 約束5 圧縮対象のフォルダ・ファイルにWindowsの禁止文字が含まれていたら圧縮を中断し、お知らせします。
- 約束6 Windows10Proで文字化けしない、解凍できることを確認済みです
- 約束7 フォルダ・ファイルでShiftJISに変換できない箇所がわかります
macOS標準のPHPを使って実現しています。
macOS標準のautomatorを使うとFinderからwindows互換のzipファイルを作ることもできます。
標準機能を使っています。アプリ等をインストールする必要はありません。
Finderでwindows互換のZIPを作るまでの手順
- windowszipのソースコード(php)をみて、コピペしてください。
ソースを見るファイル名は適当で構いません。ファイルの書き込みには、ターミナルでviすることを想定しています。
テキストエディットは自動変換機能が働くのでコード編集には向きません。viに不安のある方は、ダウンロードすることもできます。
ダウンロード
(~/ダウンロードにmac-zip-windows-masterフォルダが解凍されます。
その中にwindowszipファイルがあります。このファイルはPHP(テキスト)ファイルです) - ターミナルを開いて、windowszipに実行する権利を与えます。
$ chmod +x windowszip
ターミナルから一度実行権が付与されたことを確認してください。
以下のように実行するとwindows互換のZIPファイルが作成できます。$ ./windowszip 圧縮したいフォルダやファイル名
指定した圧縮したいフォルダやファイル名と同じ場所にZIPファイルができます。
Finderからwindowszipする方は続けて次の手順を実施してください。
- Automator(macOS標準)を利用します。Finderの右クリックのサービスメニューからWindowsZipを実行することができます。
こちらが完成形のスクリーンショットです。LaunchPadからその他>Automatorを起動します。
サービスを選びます。
左側から「シェルスクリプトを実行する」を探して、右側のエリアにドロップします。
Finderからファイル名、フォルダ名を受け取れる設定をします。
サービスは、次の選択項目を受け取る:「ファイルまたはフォルダ」
検索対象:「Finder」入力の引き渡し方法:「引数として」も合わせて指定してください。
受け取った「ファイルまたはフォルダ」をwindowszipで圧縮する設定です。
今回ご提供しているwindowszipはフォルダ、またはファイル1つだけの圧縮に対応しています。
デフォルトで表示されるシェルスクリプトは複数のファイル・フォルダを処理するためのものになっています。
以下のように修正します。for f in "$@" do /Users/macyarounanoka/local/bin/windowszip "$f" exit done
太字の部分が修正する必要がある部分です。
windowszipへのパスはフルパスで指定してください。ご自身の環境に合わせてwindowszipへのパスを修正してください。ファイルメニューから保存(コマンド+S)を選んで保存します。
ここで指定する名称がFinderの右クリックのサービスメニューに表示できます。
ここでは、「WindowsZip」を指定しています。
このようにサービスにWindowZipが追加されていることが確認できるはずです。
作ったけど、やっぱりやめる場合は、Finderの移動メニュー>フォルダへ移動から
~/ライブラリ/Servicesに移動してください。
追加したWindowsZipファイルをFinderで表示できます。
右クリックでゴミ箱へ入れることで、削除できます。
ご紹介したwindowszipコマンドは、macOS Mojaveまで対応しています。macOS Catalina以降はこのままでは動かないことがわかっています。
mac標準機能の本筋から外れますがエラーの回避方法をご紹介します。
【macOS Catalina】windowszipエラーの原因と回避方法
エラー原因は、利用していた機能がmacOS Catalinaからなくなったためです。
windowszipはphp言語で作られています。phpに組み込まれたZipArchiveクラスを利用しています。このクラスがmacOS Catalinaのphpでは組み込まれなくなっています。
ZIPする際、ZipArchiveクラスが見つからないため、windowszipを利用するとエラーになります。
回避方法は、Homebrewでphpをインストールする方法となります。
インストール方法、brewって何?はHomebrew:https://brew.sh/index_ja(公式)が詳しいです。
brewは簡単にインストール(/usr/local)できます。ただxcodeが必要になり、ディスク容量を消費します。
(Mac野郎なのかは、/usr/localではなく~/homebrew/へインストールしています。
https://github.com/Homebrew/brew/blob/master/docs/Installation.md#alternative-installsに記載されています。ほとんどの物をコンパイルすることになるので、導入までに時間がかかります)
phpのバージョンは何をインストールするの?
macOS Catalina 10.15.5時点の標準PHPのバージョンは以下のとおりです。
$ php -v PHP 7.3.11 (cli) (built: Apr 17 2020 19:14:14) ( NTS )
(10.15.4でも7.3.11でした。)
(2020年6月時点)brew search php7で検索するとphp@7.2, php@7.3, php@7.4が見つかりました。
多分どれ入れてもZipArchiveは組み込まれていると思います。私はphp@7.3で確認しました。
brew install php@7.3
brew版phpは以下にインストールされています(Mac野郎なのかの環境)
~/homebrew/opt/php@7.3/bin/php -v PHP 7.3.19 (cli) (built: Jun 18 2020 11:20:04) ( NTS )
Homebrew標準インストールされた方は、/usr/local/opt/php@7.3/bin/phpかと思われます。ターミナルで同じような感じで-vパラメータを指定してバージョンが表示されることを確認してください。
windowszipを修正します。
修正する箇所は1箇所です。ここでは~/local/bin/windowszipを修正する手順で書いています。他の場所でご利用している場合、適時パスを変えてください。
cat ~/local/bin/windowszip | sed s;/usr/bin/php;/usr/local/opt/php@7.3/bin/php > /tmp/windowszip; cp /tmp/windowszip ~/local/bin/.
*太文字の箇所はお使いの環境に合わせて修正が必要な部分です。 * viが使える方は直接修正して構いません。
上記スクリプトはファイルの先頭をこのように書き換えています。
#!/usr/bin/php
↓
#!/usr/local/opt/php@7.3/bin/php
これでmacOS Catalinaでも動作するようになります。
日本語を使っていないフォルダやファイルを圧縮するならzipコマンドが便利です。
ターミナルから以下のような引数でzipコマンドを実行するとDS_Storeファイル除去済みの圧縮ファイルを作ることができます。
$ zip -r 圧縮ファイル名.zip ./圧縮したいフォルダ -x "*.DS_Store"
-r は指定した圧縮対象のフォルダ内のフォルダを全部圧縮する意味になります。
-x で圧縮ファイルに含めたく無い拡張子やファイルを指定することができます。スペースで区切って複数指定することができます。
【Goodポイント】
__MACOSXフォルダは作られない
【Badポイント】
日本語ファイル名はWindowsで文字化けします
テキストファイルの改行コードはLFのまま。CRLF変換はあらかじめ処理しておく必要がある。
Windowsで使えないファイル名が混じっていてもそのまま圧縮されてしまう。
ZIPの暗号化の方法と注意点
ここまでで、相手に不信感を与えない圧縮ファイルを作ることができたかと思います。
zipcloakコマンドでパスワードで暗号化したZIPにすることができます。
$ zipcloak 圧縮ファイル
Enter password:
Verify password:
encrypting: ?{???̎????ꎮ.a/
encrypting: ?{???̎????ꎮ.a/?Y?t?????P?F?z?z????-1.pdf
encrypting: ?{???̎????ꎮ.a/?Y?t?????Q?F?z???C?g?{?[?h?̓d?q??.pdf
encrypting: ?{???̎????ꎮ.a/?c???^.txt
【ZIPの暗号化の注意点】
- 注意点1 ファイル名・フォルダ名は漏れる。情報を特定されて困るものはぼやかした日本語を使います。
パスワードで暗号化したZIPファイルは、開くタイミングでパスワードの入力を求めてきます。(macOS)でもWindowsのZIPフォルダの機能は、実際の中身を見るタイミングでパスワードを聞かれます。
そのため、暗号化されたZIPファイルであっても、
どんなファイルが入っているのかがわかってしまいます。
(macでもターミナルでunzip -l でファイル名がわかります) - 注意点2 短いパスワードは瞬間で解析される。パスワードは長くする
総当たりでパスワードを解析するようなツールが実在しています。
短いパスワードだと一瞬で解析されてしまう恐れがあります。パスワードは長ければ長いほど安心です。
メールで送ると誤送信が怖いですよね。
どれほど注意深くやっても、メール誤送信ってなくなりませんよね・・
OneDriveやGoogleドライブなどのクラウドストレージを利用した共有も一度検討してみてください。
ただ、クライアントさんによっては、セキュリティが心配だから避ける傾向があったりします。
アクセスしたログの保管、データがちゃんと国内に置かれているのかなど求められてりします。
法人なら法人専用のサービスも検討してみてください。
どこでもキャビネット
上記は、国際認証を取得している国内データセンターを使った
大塚商会の法人向けクラウドストレージサービスへのリンクです。
今なら14日間無料体験実施中です。
ウィルス対策、SSL通信、アクセスログなどセキュリティ面に配慮しています。
なりすましにも対応できるセキュア版もあります。
まとめ
ここまでmac標準機能でWindows互換のZIPファイルを作成する方法【日本語対応】として、
- ZIP問題の3つのポイント
- macOSのZIPはこうあってほしいと思う5選
- macのZip圧縮/解凍アプリは微妙に満足できなかったです
- Windows10の圧縮は、.DS_storeが含まれる場合があります
- mac標準機能でWindows互換のZIPファイルを作成する方法【日本語対応】
- 日本語を使っていないフォルダやファイルを圧縮するならzipコマンドが便利です。
- ZIPの暗号化の方法と注意点
をご紹介してきました。
Windows互換のZIPファイルを作る方法【日本語OK・アプリ不要!】でご紹介した方法は、
目でチェックする代わりにプログラムでチェックしてくれるのでチェック漏れがなくなります。
相手に不信感を与えない圧縮ファイルを送ることができるようになるのでよろしければ試してみてください。
AppStoreで入手できるアプリは「macOSのZIPはこうあってほしいと思う5選」を100%カバーしてくれなかったことがわかったかと思います。
送る前に注意することである程度防げると思います。
でも、チェックから漏れて、Windowsで解凍できないファイルや文字化けしたファイルを送ってしまったら・・・と考えると怖いです。
メジャーなメディアでは、日本語を使わないで、ASCIIにした方が安全!って書いてありました。
英語圏の方に送るなら違和感ないです。
日本人の自分がもし、このようなASCIIファイル名なZIPファイルを受け取ったら、なんで日本語で送ってこないの?って疑問に思います。
macだから安全のためASCIIにしましたとか、相手に説明する際もちょっと苦しいですしね・・・