2013-10-08 78 views
1

我有一個由刺字符分隔的CSV文件。我可以這樣做:Ruby CSV以Unicode字符分隔列

CSV.foreach(file_path, { encoding:'ISO8859-1', :col_sep => "þ" }) do |row| 

但我想解析我的文件,並用unicode版本的刺分隔列。

我覺得我在正確的道路上從通話中嘗試不同的選項,如:

CSV.foreach(file_path, { encoding:'unicode', :col_sep => "U+00DE" }) do |row| 

但我不出來...

我如何應在Ruby中這樣做?

感謝

+1

你的意思是這樣的嗎? '「\ u00DE」' – phoet

+0

看起來合法。但仍會得到「UTF-8中無效的字節序列」。應該編碼讀取別的東西? –

+1

'unicode'不是一種編碼。這是一個標準,它定義了幾種編碼,如UTF-8(可能是最常用的),UTF-16,UTF-32和其他一些編碼。您在源代碼中如何表示'þ'只取決於您的源編碼,而不取決於CSV文件的編碼。如果你有一個編碼「魔術評論」,或者在Ruby 2.0中使用utf-8(默認的源編碼),你可以使用文字'þ'。 – matt

回答

1

這工作:

CSV.foreach(file_path, { encoding:'ISO-8859-1', :col_sep => "\u00FE" }) do |row| 

謝謝@phoet

曾爲這一點,這樣做的:

Encoding.name_list.each do |encoding| 
    CSV.foreach(file_path, { encoding:encoding, :col_sep => "\u00FE" }) do |row| 
    puts row.inspect 
    break 
    end 
end 

樂趣

+0

請接受這個答案,雖然它是你自己的。其他人則不必嘗試回答。 – phoet