0

我有一个从 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

4

1 回答 1

1

哇,这是由grepDevKit 中的垃圾引起的。

>rake import:csv["../file.csv"]
... name: "O'Brien ...

>where grep
C:\DevKit2\bin\grep.exe

我也不需要.encode('utf-8').

让这成为孩子们的教训。永远不要把任何事情视为理所当然。没有人相信!

于 2018-06-02T06:25:28.903 回答