zipの仕様をあたったわけではないけど、どうもアーカイブ内のファイル名の文字コードは環境依存らしい。
なので、日本語版のWindowsで作成したzip内のファイル名はCP932だし、Macで作成したものはutf8-macらしい。
この、Windowsで作成したCP932ファイル名のzipファイルを、MacのFinderで右クリックして開く(デフォルトで、アーカイブユーティリティ.appに関連付けられている)と、勝手にCP932をutf8-macに変換してくれるので、意識せずにそのままFinderでアクセスできる。
しかし、この展開してできたディレクトリにちょっと手を加えて、Finderの「"ディレクトリ名"を圧縮」を使うと、utf8-macでファイル名がエンコードされてしまい、さらには __MACOSX とか言う謎のディレクトリまで入ってしまう。(これについてはぐぐれば情報がいっぱいある)
これではWindowsでは使えないので、日本語を含まないファイル名にしてコマンドラインのzipで固めてやると、__MACOSXも入らない。
ここで、「ちょっと手を加えたい」zipファイルがたくさんある場合、当然シェルスクリプトとかで処理したいわけだけど、コマンドラインのunzipはアーカイブユーティリティみたいに文字コードを変換してくれないのでCP932のアーカイブを文字化けせずに展開できない。
ちょっと調べてみると、日本語ファイル名が文字化けしないunzipのビルド手順 - ymknの日記と言うページを見つけたので、真似してみる。
ただし、私はHomebrewではなくMacPortsなので、その路線で。(と言っても、自家Portを作ったりするわけではない)
前提条件
なので、日本語版のWindowsで作成したzip内のファイル名はCP932だし、Macで作成したものはutf8-macらしい。
この、Windowsで作成したCP932ファイル名のzipファイルを、MacのFinderで右クリックして開く(デフォルトで、アーカイブユーティリティ.appに関連付けられている)と、勝手にCP932をutf8-macに変換してくれるので、意識せずにそのままFinderでアクセスできる。
しかし、この展開してできたディレクトリにちょっと手を加えて、Finderの「"ディレクトリ名"を圧縮」を使うと、utf8-macでファイル名がエンコードされてしまい、さらには __MACOSX とか言う謎のディレクトリまで入ってしまう。(これについてはぐぐれば情報がいっぱいある)
これではWindowsでは使えないので、日本語を含まないファイル名にしてコマンドラインのzipで固めてやると、__MACOSXも入らない。
ここで、「ちょっと手を加えたい」zipファイルがたくさんある場合、当然シェルスクリプトとかで処理したいわけだけど、コマンドラインのunzipはアーカイブユーティリティみたいに文字コードを変換してくれないのでCP932のアーカイブを文字化けせずに展開できない。
ちょっと調べてみると、日本語ファイル名が文字化けしないunzipのビルド手順 - ymknの日記と言うページを見つけたので、真似してみる。
ただし、私はHomebrewではなくMacPortsなので、その路線で。(と言っても、自家Portを作ったりするわけではない)
前提条件
- MacPortsがインストールされている。
- MacPortsでlibiconvがインストールされている
- sudo port fetch unzip でunzipのソースを取得。
- 好きなところにソース(/opt/local/var/macports/distfiles/unzip/unzip60.tar.gz)を展開。
- FS#15256 – [unzip] New unzip 6.0 lacks -O -I optionsからpatchを持ってきて、patch -p1であてる。
- unix/Makefileをコピーして、以下を修正
*** unix/Makefile 2009-01-19 07:41:18.000000000 +0900 --- Makefile 2011-05-03 00:14:43.000000000 +0900 *************** *** 50,56 **** CFLAGS = -O CF_NOOPT = -I. -I$(IZ_BZIP2) -DUNIX $(LOC) CF = $(CFLAGS) $(CF_NOOPT) ! LFLAGS1 = LF = -o unzip$E $(LFLAGS1) LF2 = -s --- 50,56 ---- CFLAGS = -O CF_NOOPT = -I. -I$(IZ_BZIP2) -DUNIX $(LOC) CF = $(CFLAGS) $(CF_NOOPT) ! LFLAGS1 = -L/opt/local/lib -liconv LF = -o unzip$E $(LFLAGS1) LF2 = -s *************** *** 121,127 **** INSTALL_D = mkdir -p # on some systems, manext=l and MANDIR=/usr/man/man$(manext) may be appropriate manext = 1 ! prefix = /usr/local BINDIR = $(prefix)/bin# where to install executables MANDIR = $(prefix)/man/man$(manext)# where to install man pages INSTALLEDBIN = $(BINDIR)/funzip$E $(BINDIR)/unzip$E $(BINDIR)/unzipsfx$E \ --- 121,127 ---- INSTALL_D = mkdir -p # on some systems, manext=l and MANDIR=/usr/man/man$(manext) may be appropriate manext = 1 ! prefix = /opt/local BINDIR = $(prefix)/bin# where to install executables MANDIR = $(prefix)/man/man$(manext)# where to install man pages INSTALLEDBIN = $(BINDIR)/funzip$E $(BINDIR)/unzip$E $(BINDIR)/unzipsfx$E \ *************** *** 872,878 **** # Macintosh MacOS X (Unix-compatible enviroment), using standard compiler macosx: unix_make ! $(MAKE) unzips CFLAGS="-O3 -Wall -DBSD" LF2="" $(STRIP) $(UNZIPS) # Macintosh MacOS X (Unix-compatible enviroment), using gcc --- 872,878 ---- # Macintosh MacOS X (Unix-compatible enviroment), using standard compiler macosx: unix_make ! $(MAKE) unzips CFLAGS="-O3 -Wall -DBSD -I/opt/local/include -DNATIVE" LF2="" $(STRIP) $(UNZIPS) # Macintosh MacOS X (Unix-compatible enviroment), using gcc
- 後は、make macosxして、make installすれば/opt/local/bin に入る。
カテゴリ
Macトラックバック(0)
このブログ記事を参照しているブログ一覧: zipアーカイブ内のファイル名
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/2619
コメントする