我有一个从 Excel 保存的 CSV 文件,它是 CP-1252/Windows-1252。我尝试了以下方法,但它仍然损坏。为什么?
csv_text = File.read(arg[:file], encoding: 'cp1252').encode('utf-8')
# csv_text = File.read(arg[:file], encoding: 'cp1252')
csv = CSV.parse csv_text, :headers => true
csv.each do |row|
# create model
p model
结果
>rake import:csv["../file.csv"] | grep Brien
... name: "Oâ?TBrien ...
但是它在控制台中工作
> "O\x92Brien".force_encoding("cp1252").encode("utf-8")
=> "O'Brien"
我可以在 Notepad++ 中打开 CSV 文件Encoding > Character Sets > Western European > Windows-1252
,看到正确的字符,然后Encoding > Convert to UTF-8
. 但是,我希望 Ruby 处理很多文件。
类似:如何在 Rails 中解析 CSV 期间更改编码。但这并不能解释为什么会失败。
Ruby 2.4,参考:https ://ruby-doc.org/core-2.4.3/IO.html#method-c-read