人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Ruby 1.9.3でbom付きUTF8ファイルを出力する方法

使用している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での保存が必要です。

●質問者: Ganan
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Cherenkov
●300ポイント ベストアンサー

文字コード: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

Gananさんのコメント
ご回答ありがとうございます。 一行入魂のサイトを参考にして、書き直したら、出力ファイルがiphoneで見れません。 UTF-16はiphoneが対応していないかもしれません。 なんとかiphoneとwindowsのexcel両方で見れるcsvファイルを出力できないでしょうか? その他のプログラムは全てカンマを区切り値として使っているので、区切りもできればtabじゃなく、カンマのほうがいいです。。。リアルタイムでcsvファイルが自動で更新されるプログラムを作ったので、手動で文字コードを変更し直すのも選択肢に入っていないです。 宜しくお願いいたします。

Cherenkovさんのコメント
追記しました。こちらの環境ではbom付けに成功しました。

Gananさんのコメント
おお!解決しました♪どうもありがとうございました!!

2 ● oil999
●0ポイント

http://yohshiy.blog.fc2.com/blog-entry-9.html
この方法はRuby 1.9でもできましたが、何ができないのでしょう?


Gananさんのコメント
実行すると 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>' とエラーが出てきます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ