linuxでZIPファイルを作るとWindowsで文字化けしてしまう。日本語はSJISに変換してからZIPに追記したいです。でもZIPコマンドは対応がいまいちでした。圧縮率は考えず、ただ、アーカイブ出来ればOK。
使い方
ruby zip-cp932.rb システム見積もり書-2011-03-01.zip システム見積もり書-2011-03-01
zip-cp932.rb
#!/usr/bin/env ruby require 'rubygems' require 'kconv' require 'zipruby' require 'fileutils' KCODE="u" #windowsで開いて文字化けしないように #cp932でファイル名を指定してアーカイブする exit if ARGV.size < 1 if ARGV.size == 1 then ZIPFILE_NAME = ARGV[0].strip.toutf8+".zip" DIR_NAME = ARGV[0].strip.toutf8 elsif ARGV.size >= 2 then DIR_NAME = ARGV[1].strip.toutf8 ZIPFILE_NAME = ARGV[0].strip.toutf8 end raise "存在しないディレクトリ'#{DIR_NAME}'".toutf8 unless File.exist? DIR_NAME File.unlink ZIPFILE_NAME if File.exist? ZIPFILE_NAME full_path = File.expand_path DIR_NAME begin Zip::Archive.open(ZIPFILE_NAME, Zip::CREATE ){ |ar| top_dir_name = File.basename(full_path).tosjis ar.add_dir(top_dir_name) Dir.chdir(full_path){|dir| Dir.glob("**/*".gsub(" ", "\\ ")).each{|entry| if File.directory? entry ar.add_dir( top_dir_name+"/" + entry.tosjis ) else ar.add_file(top_dir_name+"/"+entry.tosjis,entry) end } } } rescue => e puts e puts ARGV.join("\n") end