2
我的Ruby環境是:Ruby 2.3.1和Rails 5.0.0.1。在Ruby中導入時將字符串負數轉換爲整數的錯誤
我試圖負串號轉換成一個整數,比如:
當我嘗試把這個在IRB終端「-2000」,我得到的結果預計-2000
但我試圖轉換這個時,我從CSV文件導入此數據。
我使用了以下信息:
CSV文件
345,-2000
345,120000
代碼文件
CSV.foreach("file.csv") do |row|
p [row[0], row[1]]
p row[1].to_i
p row[1].force_encoding('UTF-8').to_i
p Integer(row[1])
p Integer(row[1].force_encoding('UTF-8'))
end
我說:
["345", "-2000"]
0
0
'Integer': invalid value for Integer(): "\xC2\xAD2000" (ArgumentError)
'Integer': invalid value for Integer(): "\xC2\xAD2000" (ArgumentError)
使用整數() ,我發現 - s ign由「\ xC2 \ xAD」表示。
總之,to_i方法正在將「\ xC2 \ xAD2000」轉換爲0,並且Integer()觸發了一個錯誤。
有人可以幫忙嗎?
感謝您的關注。
這些數據來自哪裏和/或什麼是CSV編碼?本教程可能會有所幫助 - http://www.justinweiss.com/articles/3-steps-to-fix-encoding-problems-in-ruby/ –
@DamienRoche這是一個帶有CSV擴展的簡單文件。我沒有編碼這個文件。我只是使用CSV類來轉換數組中的每一行。我會看到教程。謝謝。 –
'force_encoding'只能用於非常特殊的情況;並且幾乎從不打開文件(除非你知道有特定的文本不符合文件的整體編碼)。相反,您應該在打開CSV時指定編碼;請參閱[文檔](http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/CSV.html#method-c-foreach)。 – Kelvin