2017-07-30 51 views
0

我想在CSV文件中用Ruby的csv庫編寫UTF-8字符。我已經得到了一個錯誤:CSV編寫Ruby編碼錯誤

csv ruby write problem ASCII-8BIT (Encoding::CompatibilityError)

#create csv file 
CSV.open(CSV_file,"wb",) do |csv| 
    csv << First_line 
    rows.each do |r| 
    csv << r.generate_array 
    end 
end 

這就是代碼,其中UTF-8衝突與ASCII-8BIT。

失敗

示例文本:

demás

+0

紅寶石2.3.4p301(2017年3月30日修訂58214)x86_64的-Linux的GNU] 的Ubuntu 16.04 使用uname -r 4.10.0-28泛型 – kahonmlg

+0

我想寫UTF-8成文件。 – kahonmlg

+0

r是我創建的一個名爲CSV_row的類。它們是用同一個腳本生成的對象。從其他文件中獲取數據,並生成一個包含將插入到CSV中的文本信息的對象。 – kahonmlg

回答

1

這裏是CSV寫作的一個例子,用UTF-8閱讀:

fn="/tmp/f.csv" 

require "csv" 
d1=DATA.read.split(/\n/).map {|e| e.split} 
CSV.open(fn, "w:utf-8") do |row| 
    d1.each { |dr| row << dr } 
end 

d2=[] 
CSV.foreach(fn) do |row| 
    d2 << row 
end 

puts d1==d2 
# true 

__END__ 
privé face à face à un tête-à-tête 
Face to face with one-on-one 
demás 

如果您沒有完成更詳細的例子,我不能進一步幫助。

+0

問題是我讀了一個文件之前,我沒有強制讀取enconde utf-8。所以在對象中我有其他編碼的信息,這是問題。需要寫uft-8確保讀取。'File.open(path,'r:utf-8'){| file | file.read}'謝謝! – kahonmlg

+0

如果在打開文件時沒有指定utf-8對於編寫,其編碼將取決於編寫的源字符串的編碼。可能是因爲您正在將字符串與diffe混合將類型的編碼租用到單個數組中? – dawg

+0

是的,我有不同的編碼字符串。因爲對象的其中一個屬性是存儲從文件中讀取信息的屬性。當我閱讀該文件時,我沒有指定相關閱讀。所以當我指定讀取像utf-8。對象的每個字符串都具有相同的編碼。 – kahonmlg