2
My Rubyの環境は、Ruby 2.3.1とRails 5.0.0.1です。Rubyでインポートするときに、文字列の負の数値を整数に変換する際のエラー
Iは、例えば、整数に負の文字列番号を変換しようとしている:
私はこれをオンにしようと「-2000」IRBターミナルで、私は結果が-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)
整数を使用して()私は、 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を開くときにエンコードを指定する必要があります。 [the doc](http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/CSV.html#method-c-foreach)を参照してください。 – Kelvin