为什么Ruby无法将CP-1252转换为UTF-8?

为什么Ruby无法将CP-1252转换为UTF-8?,ruby,csv,utf-8,cp1252,ruby-csv,Ruby,Csv,Utf 8,Cp1252,Ruby Csv,我有一个从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

我有一个从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"
我可以在记事本++中打开CSV文件,
编码>字符集>西欧>Windows-1252
,查看正确的字符,然后
编码>转换为UTF-8
。然而,我希望Ruby能够处理很多文件

类似:。但这并不能解释为什么这是失败的


Ruby 2.4,参考:

哇,这是由DevKit中的垃圾
grep
造成的

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

>where grep
C:\DevKit2\bin\grep.exe
我也不需要
.encode('utf-8')


让这成为孩子们的一课。永远不要想当然。不要相信任何人

编码:“cp1252”
救了我一天!