2016-11-23 50 views
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()觸發了一個錯誤。

有人可以幫忙嗎?

感謝您的關注。

+0

這些數據來自哪裏和/或什麼是CSV編碼?本教程可能會有所幫助 - http://www.justinweiss.com/articles/3-steps-to-fix-encoding-problems-in-ruby/ –

+0

@DamienRoche這是一個帶有CSV擴展的簡單文件。我沒有編碼這個文件。我只是使用CSV類來轉換數組中的每一行。我會看到教程。謝謝。 –

+0

'force_encoding'只能用於非常特殊的情況;並且幾乎從不打開文件(除非你知道有特定的文本不符合文件的整體編碼)。相反,您應該在打開CSV時指定編碼;請參閱[文檔](http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/CSV.html#method-c-foreach)。 – Kelvin

回答