使用しているrubyのバージョンはRuby 1.9.3p194です。
ソースコードは下記になります。
require 'kconv'
io = open("出力したいファイル名.csv","w")
doc = File.read("読みたいファイル名")
io.puts Kconv.toutf8(doc)
io.puts doc
io.close
これを実行するとwindows上のExcellで開くと日本語が文字化けしてしまいますが、
cotEditorで"UTF-8のときBOMも保存"のチェックボックスを入れて保存し直すと、
文字化けがなおります。"UTF-8のときBOMも保存"をruby上で処理するにはどうすればよろしいでしょうか?よろしくお願いします。
web上でいろいろ解決法を探しましたが、ruby 1.8がほとんどで、ruby 1.9では実行できません。ruby 1.8に戻れないので、1.9.3の解決法をお願いします。
また下記のサイトも参考にしましたが、文字化けがなおりませんでした。
http://d.hatena.ne.jp/wwwcfe/20101229/ruby19_encoding
http://hpcgi2.nifty.com/sakazuki/forum/wwwforum.cgi?id=4&az=thread&number=66
http://stackoverflow.com/questions/9886705/how-to-write-bom-marker-to-a-file-in-ruby
http://yohshiy.blog.fc2.com/blog-entry-9.html
P.S. iphone上でもcsvを表示させるため、どうしてもutf8での保存が必要です。
文字コード:UTF-16LE(BOM必須)
改行コード:CRLF
区切り文字:tab
追記:
shift_jisなファイルを読み込んで、BOM付きutf-8で保存。
io = open("出力したいファイル名.csv","w") io.print("\xEF\xBB\xBF") #write BOM doc = File.read("読みたいファイル名.csv", :encoding => Encoding::Shift_JIS).encode(Encoding::UTF_8) io.puts doc io.close
文字コード:UTF-16LE(BOM必須)
改行コード:CRLF
区切り文字:tab
追記:
shift_jisなファイルを読み込んで、BOM付きutf-8で保存。
io = open("出力したいファイル名.csv","w") io.print("\xEF\xBB\xBF") #write BOM doc = File.read("読みたいファイル名.csv", :encoding => Encoding::Shift_JIS).encode(Encoding::UTF_8) io.puts doc io.close
追記しました。こちらの環境ではbom付けに成功しました。
おお!解決しました♪どうもありがとうございました!!
http://yohshiy.blog.fc2.com/blog-entry-9.html
この方法はRuby 1.9でもできましたが、何ができないのでしょう?
実行すると
test.rb:3:in `[]=': can't convert Fixnum into String (TypeError)
from test.rb:3:in `write_bom'
from test.rb:10:in `block in <main>'
from test.rb:9:in `open'
from test.rb:9:in `<main>'
とエラーが出てきます。
追記しました。こちらの環境ではbom付けに成功しました。
2012/08/02 00:30:44おお!解決しました♪どうもありがとうございました!!
2012/08/02 10:27:48