Windowsで文字化けしないzipを作るAppleScript
ここに書いてあることがすばやく、簡単にできるソフトMacZip4Winがありますので実用にはこちらをお勧めします。
2008/5/19更新
これは何?
Mac OS XからFinderで簡単にzipファイルを作れるようになりました。しかし、保存されるファイル名の文字コードがユニコードらしくてWindowsで解凍すると日本語ファイル名が文字化けしてしまいます。
これを解決する方法がここ、これに書いてあって試した所日本語でもちゃんと文字化けしなくて解凍できるzipができました。ただ手順が手作業でやるには面倒なのでこれを自動でやるAppleScriptを作ってみました。
AppleScriptファイル
最新版(2008/05/19)
フォルダを圧縮する場合にフォルダ名によってはエラーになるのを修正。あと、dmgをマウント時にverifyしないようにしたのでちょっと動作が速くなったかも。ファイルが100個ぐらい入ったフォルダを圧縮したらdmgにスペースが足りませんと言われたので、dmgのサイズ計算部分に余裕を今より持たせるようにしました。
「makeSjisZipVer1.1.3.zip」をダウンロード
以下の3つのファイルが入っています
- Windowsで文字化けしない無圧縮zipを作る.app
- Windowsで文字化けしないzipを作る.app
- Windowsで文字化けしないパスワード付きzipを作る.app
過去のファイル
通常版(パスワード無しzipを作る)
- ダウンロード makeSjisZip.zip (37.6K)
- ダウンロード makeSjisZipVer1.1.zip (42.1K)同名のzipファイルがある場合にユニークな名前を付けるようにした。ファイルサイズを計算してディスクイメージを作るようにした。
- ダウンロード makeSjisZipVer1.1.1.zip (44.9K)圧縮するファイル名によってはzipファイル名作成時にエラーが出るのを修正
パスワードが付けられるバージョン。10.5以降が必要。
「makeSjisPasswordZipVer1.1.2.zip」をダウンロードFinderで濁点付きファイル名をコピーしてパスワードにペーストした場合に解凍できないzipができる問題を解決
- 「makeSjisPasswordZipVer1.1.1.zip」をダウンロード(パスワード付きzipを作る。日本語パスワードのzipも作れる。10.5.1で動作確認)
パスワードが付けられるバージョン。10.4用。
最初から入ってるzipコマンドではパスワード付きzipが作れないのでZip Tools for Mac OS X 1.1をインストールする必要があります
サンプルzipファイル
- Finderで圧縮したzip testfilesByFinder.zip (4.3K)
- このAppleScriptで圧縮したzip testfilesByconvmvAndzip.zip (0.9K)
- 日本語パスワード付き「testfiles_kana_sakura.zip」パスワードは"さくら"
- パスワード付き「testfiles_sakura.zip」パスワードは"sakura"
スクリーンショット
- Finderで表示した元のファイル
- このAppleScriptで圧縮したzipをWindowsで表示した所
- Finderで圧縮したzipをWindowsで表示した所
説明
使い方は.scptはFinderでzip圧縮したいファイルを選択した状態でスクリプトメニューや各種AppleScriptのランチャーから実行してください。.appはzip圧縮したいファイルをアプリケーションにドラッグドロップしてください。どちらもzipファイルが出来るまでにわりと時間がかかります。できあがったらダイアログが表示されるので気長に待ってください。
10.3ですとditto --norsrc
の所でエラーが出ます。--norsrcを削除すると動くようになります。できあがったのはWindowsで文字化けしたとの書き込みを見たので自分も試してみましたが自分は文字化けしなかったです。ただ、USBディスクにテストzipファイルがいっぱいあったので間違ったのを見た可能性もなきにしもあらず…。
このAppleScriptの最重要アイテムのconvmvですがデフォルトではOSに入っていないので別途インストールする必要があります。convmv - convert filenames to utf8 or any other charsetからダウンロードできます。いっぱいありますが一番新しいのでいいと思います。ダウンロードしたものをターミナルを使っていインストールもできるのですが、ターミナルが分からない人向けにconvmvをアプリケーションフォルダにコピーした場合でも動くようにしました。convmvをいろいろ使うならちゃんとインストールした方がいいと思いますが、このAppleScriptでのみ使うならconvmvをアプリケーションフォルダにコピーする方法がお手軽だと思います。下の画像のように置いてあればOKです。
どんなファイル名でもWindowsで文字化けしないで解凍できるかはわかりませんし、どれぐらいWindowsで問題なく解凍できるものが出来るか分かりませんが、手元にWindows環境が無いけどWindowsで文字化けしないzipを作りたい場合に使えるかもしれません。
| 固定リンク
「AppleScript」カテゴリの記事
- AppleScriptのちょっとしたスクリプト(2009.12.04)
- Safariで表示しているVeohの動画のオリジナルファイルのURLをクリップボードに入れるAppleScript(2009.02.05)
- QuickTimeのテキストトラックでニコニコ動画のコメントを表示してみるAppleScript(2008.02.22)
- DragThingに日付カウントダウンを表示(2008.01.05)
「zip」カテゴリの記事
- Windowsで文字化けしないzipを作るAppleScript(2007.12.14)
この記事へのコメントは終了しました。
コメント
頂きました。ありがとうございます。
投稿: | 2007年9月10日 (月) 21時21分
頂きましたっ!
友人がWinなので大助かりです。有難うございました〜!!
投稿: とく坊 | 2007年9月11日 (火) 19時40分
今は手元にMacが無いので推測混じりになりますが、元々CP932の範囲外で変換不能な文字を別にしても、
・ロングファイルネームの使用禁止文字( \ / : * ? " < > | )
・予約語になっているMS-DOSデバイス名(CON, AUX, NUL, PRN, LPT1 ~ LPT4, COM1 ~ COM4, etc...)
・NTFSのストリーム名表記
・Finder上では / に見える文字が、POSIX標準入出力関数からは : に見える
・最近のMac OS Xは、POSIX標準入出力関数が normalization form insensitive になっていて NFC を NFD に勝手に正規化してしまうので、convmvで変換した後に偶然NFCな濁点文字があった場合に、再度ファイル名を読み取るとNFDに正規化されているかもしれない
等が問題になるかもしれません。
蛇足ですが、大昔にLHaのMac OS X用patch(autoconf版とは別)を書いた人は、展開専用にする事で上記の面倒を避けたために、かなり後までズルいと言われ続けたそうですw
投稿: っき | 2007年9月12日 (水) 17時59分
失礼、コメントからいくつかの文字が抜けてしまったようです。
ロングファイルネームの使用禁止文字に半角の"<"と">"を追加してください。
投稿: っき | 2007年9月12日 (水) 18時11分
>っきさん
試しに「\ / * ? " |」を含んだファイル名のzipを作ってWindowsのエクスプローラーでzip内を表示した所、禁止文字を含んだファイルが表示されませんでした。Lhaplusでは禁止文字を含んだファイル解凍時にエラーになりました。解凍時に気を利かせてリネームしてくれるソフトは無いのかな。
「非互換ネームcheck」というアプリケーションでファイル名にWindows禁止文字が含まれているかチェックできるので安全重視の方は使ってみてはどうでしょうか。
投稿: r | 2007年9月17日 (月) 18時09分
仕事で暗号付きZipが必須のため、このスクリプトを便利に使わせていただいております。
これまでファイル名でのトラブルはないのですが、フォルダごと圧縮する際に、フォルダ名に括弧が入っているとエラーになって圧縮できません。
dittoによる作業用ディスクイメージへのコピーでエラーになっていたので、以下のようにスクリプトを修正して使っております。(dittoコマンド内でフォルダのフルパス名を生成するのではなく、事前に変数に入れておいて"quoted form of"が効くように修正)
(元ソース)
-----------------------------------------------------------
if theAliasPath ends with ":" then
--フォルダ
set theFilePath to POSIX path of theAlias as string
do shell script "ditto --norsrc " & quoted form of theFilePath & " " & quoted form of dmgVolumePath & "/" & theName
--.DS_Store削除 -- ディスクに対してやるとtrashフォルダでエラーが出たので個別にやる
do shell script "cd " & quoted form of dmgVolumePath & "/" & theName & "; find . -name '.DS_Store' -delete"
-----------------------------------------------------------
(修正後)
-----------------------------------------------------------
if theAliasPath ends with ":" then
--フォルダ
set theFilePath to POSIX path of theAlias as string
set theDestFilePath to dmgVolumePath & "/" & theName
do shell script "ditto --norsrc " & quoted form of theFilePath & " " & quoted form of theDestFilePath
--.DS_Store削除 -- ディスクに対してやるとtrashフォルダでエラーが出たので個別にやる
do shell script "cd " & quoted form of theDestFilePath & "; find . -name '.DS_Store' -delete"
-----------------------------------------------------------
AppleScriptをよく知らないため変数をひとつ追加して動くようにしましたが、フルパス名を作る際になにかしらで囲ってやるだけでいけるのかもしれません。お恥ずかしい限りです。
投稿: にしやん | 2008年5月17日 (土) 15時12分
にしやんさん、こんにちは。
確かにフォルダ名によってはエラーが出ますね。
作ったけど全然使ってないので気がつきませんでした…。
自分が直したのも公開しておきました。
投稿: r | 2008年5月20日 (火) 00時03分
「makeSjisZipVer1.1.3.zip」をダウンロードして解凍したところ、
見事に文字化けしてました・・
vistaだからでしょうか??
投稿: vista | 2008年8月12日 (火) 19時22分
それはFinderで圧縮したzipなのでそうなります。
中身もMac用のアプリケーションしか入っていないのでWindowsだと意味が無いと思います。
投稿: r | 2008年8月12日 (火) 21時53分
こんにちは。
convmv ですが、MacPorts にも入っています。
convmv の tarball を展開して make test をすると、UTF8 絡みで fail するので、
私は MacPorts で入れてしまいました。
スクリプト内では convmv は/Applications/convmv か /usr/local/bin/convmv
しか探してくれないので、実行できません。
convmvPath に以下を追加して /opt/local/bin/convmv を探すようにしました。
try
do shell script "ls /opt/local/bin/convmv"
return "/opt/local/bin/convmv"
end try
投稿: nonami | 2008年8月12日 (火) 23時07分
こんにちは。
>make test をすると、UTF8 絡みで fail するので、
これはなんらかのエラーが起こる可能性があるってことでしょうか。
安全を期すならMacPortsの方がいいのかな。
自分は相変わらずG4でintel MacじゃないのでWindows環境が動かないからこれのやりが書いてあった時にこれは何かの役に立ちそうだということで作ってみたけど実際はほとんど使ってないです。
のでなにか不具合があっても気がつかない可能性が大きいので、何か気がついた人はここに書いておいていただけると自分や他の人の参考になると思います。今まで書いてくださった方、ありがとうございます。
投稿: r | 2008年8月13日 (水) 16時01分
convmvをアプリケーションフォルダにコピーして使うのは自分的には嫌なのでアプリケーションバンドルにしてパッケージの中に入れられるようにしてはいかがでしょうか?
その際スプリクトを次のように修正します。
on convmvPath()
try
set MyconvmvPath to path to resource "convmv"
return quoted form of POSIX path of MyconvmvPath
on error
return ""
end try
end convmvPath
あと作業用のディスクイメージの名前をピリオドから始めるとデスクトップに表示されないのでスッキリしていいです。
投稿: umineko | 2008年8月13日 (水) 17時34分
こんにちは。
>>make test をすると、UTF8 絡みで fail するので、
>これはなんらかのエラーが起こる可能性があるってことでしょうか。
正確なところはわかりません。
エラーメッセージをみると、ドイツ語っぽい文字を使ったパスのところで
ひっかかっているようなので、日本語を普通に使っているのであれば、問
題ないのかもしれません。
私も積極的に使っているわけではなく、世の中には自分が使っている windows
しかないと思い込んでいる事務方のボケどもにガタガタ (お前の zip は文字化け
するだの、英語のファイル名は嫌がらせなのかだの) 言われるのがいやで、
このスクリプトを使わせていただこうと思っているので、問題は実体験していません。
投稿: nonami | 2008年8月13日 (水) 22時23分
こんにちは
uminekoさん
アプリフォルダにそのまま入れるのは整理上嫌な人も多いだろうからその方がいいとは思いますが、ライセンスとかよくわからないので今の形になってます。
中に入ってる方が最初の準備が要らないので便利なのは確実ですけどね。
nonamiさん
そうですか。自分でたまに使って何かエラー出たらここに書きたいと思います。滅多に使いませんが。
最近他のサイトでこれの紹介してくださってるところがあって動作の検証されてましたが、そこでも大丈夫みたいなので、まあ大丈夫なのかな。
投稿: r | 2008年8月14日 (木) 23時06分
Universal Binaryでビルドしていただくことは出来ませんか?
Intel Mac で少しは速くなりそうですが・・・
投稿: kumari | 2008年8月18日 (月) 11時49分
AppleScriptアプリケーションにそういった区別はあるのか考えたことが無かったですがアプリケーションバンドルで保存するとUniversalって表示されますね。
Universalで試してみたいって場合はアプリケーションをスクリプトエディタで開いて、「別名で保存」で「アプリケーションバンドル」形式で保存してください。
でも、処理に時間がかかってるのはAppleScriptから呼び出した別コマンドだと思うからほとんど変わらないかな?
投稿: r | 2008年8月19日 (火) 18時27分
ご返答ありがとうございます。やってみました。1秒も変わりませんでした。
以前にPPC用のアプリケーションが異常に重く、Universalのものを使用したら快適だったことがあったので、それで・・・
あんまりアプリケーションのことを分かってなくて失礼しました。
投稿: kumari | 2008年8月20日 (水) 16時33分
MacZip4Win
http://japo.net/rana/2008/08/maczip4win.html
というWindowsで文字化けしないzipが作れる単体ソフトが作られたようです。
投稿: r | 2008年8月26日 (火) 19時05分
はじめまして。
いつも便利に使わせていただいております。
ありがとうございます。
時々、重いファイルだとエラーが起きてしまい
途中で止まってしまうことがあるのですが、その場合、
一時ファイルはどこに保存されているのでしょうか?
圧縮しようとしたファイルを同程度の容量が
HDDの空きスペースから減っておりますので、
どこかに一時ファイルがあるのだと思うのですが、
削除できず困っております。
よろしくご教示ください。
投稿: makoto | 2009年7月20日 (月) 23時43分
tmpフォルダに作るので再起動したりしたら勝手に削除されると思います。
tmpフォルダの場所はややこしいのですが次のAppleScriptで開くことができます。
--
set tmpFolder to path to temporary items folder
tell application "Finder" to open tmpFolder
--
自分の場合
/private/var/folders/8T/8THOGEhoge/TemporaryItems
になってます。
投稿: r | 2009年7月21日 (火) 20時44分
返信遅くなりまして申し訳ございません!
確かにそのようになっておりました。
一時ファイルも削除されているようで
中に何もありませんでした。
ありがとうございました!
投稿: makoto | 2009年8月21日 (金) 09時16分
はじめまして。
検索していたところ、こちらのページにたどり着いたのですが、
先に書かれているmakotoさんと同じ一時ファイルの件で質問がございます。
AppleScriptでフォルダーを開いたところ空だったのですが、
HDDの容量が戻らず、困っています。
再起動も何度かしたのですが、あまりmacに詳しくないため
行き詰まってしまいました…。
最終投稿からだいぶお時間が経っていますが、
お教えいただけますと嬉しいです。
どうぞよろしくお願いいたします。
投稿: eri | 2011年9月16日 (金) 16時52分
こんにちは。
tmpFolderに無ければよくわかりませんが、
とりあえず、Finderでゴミ箱を空にしてみるといいかもしれません。
投稿: r | 2011年9月20日 (火) 19時56分
返信が遅れ申し訳ありませんでした。
そうですか…ゴミ箱も空にしたのですが、
なぜか未だに戻りません--;;
自分でも模索してみます。
どうもありがとうございました!
投稿: eri | 2011年9月27日 (火) 15時53分