2011-10-19 13 views
3

いくつかのCSVファイルを読み込んで処理し、(新しい)CSVファイルを書き出すRubyスクリプトがあります。私はRuby 1.9.2と新しい標準の 'csv' gem(以前はFasterCSVだった)を使用しています。ソースCSVファイルにはASCII以外の文字(éなど)が含まれていますが、エンコーディングが正しく表記されないようにExcelから出力されています。特に、ファイルをルビにロードすると、次のようになります。Excel CSVでRuby 1.9をエンコードする

require 'csv' 
t = CSV.table('file.csv',:converters=>nil) 
t.to_s.encoding 
# encoding is ASCII-8BIT 

実際の文字列はUTF-8ですが、私の問題は、実際にUTF-8に変換するためにASCIIであるとマークされているこの文字列を取得できないようです。私はこれを試してみる:

require 'csv' 
t = CSV.table('file.csv',:converters=>nil) 
f = File.new('output.csv','w:utf-8') 
f.write(t.to_s.force_encoding('utf-8')) 
f.close 

出力ファイルは、まだASCIIでエンコードされているとしてリストされています。出力ファイルをUTF-8でエンコードするにはどうすればよいですか?あなたは、彼らが実際にMacRomanのエンコーディングになるだろう出力にファイルをMacのExcelを使用している場合

+0

この議論を見てください:http://stackoverflow.com/questions/7047944/ruby-read-csv-file-as-utf-8-and-or-convert-ascii-8bit -encoding-to-utf-8 これはあなたを助けてくれるでしょう。 – WarHog

+0

@WarHogありがとう、これは私が探していたものです。 –

答えて

2

は、以下のコードは、それを行うための最善の方法をではないかもしれないが、それは

rows = [] 
CSV.foreach("../yourfile.csv", col_sep: ",", encoding: "MacRoman") do |row| 
    rows << row.map! {|v| v.encode("UTF-8") unless v == nil } 
end 

は、あなたがに変換することができます動作しますCSV ::テーブルなど何でも

関連する問題