【问题标题】:Why is Ruby failing to convert CP-1252 to UTF-8?为什么 Ruby 无法将 CP-1252 转换为 UTF-8?
【发布时间】:2018-11-12 05:16:53
【问题描述】:

我有一个从 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 处理很多文件。

类似:How to change the encoding during CSV parsing in Rails。但这并不能解释为什么会失败。

Ruby 2.4,参考:https://ruby-doc.org/core-2.4.3/IO.html#method-c-read

【问题讨论】:

    标签: ruby csv utf-8 cp1252 ruby-csv


    【解决方案1】:

    哇,这是由 DevKit 中的 grep 引起的。

    >rake import:csv["../file.csv"]
    ... name: "O'Brien ...
    
    >where grep
    C:\DevKit2\bin\grep.exe
    

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

    让孩子们上一课。永远不要把任何事情视为理所当然。相信没有人

    【讨论】:

    • encoding: 'cp1252' 拯救了我的一天!
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多