Почему Ruby не может конвертировать CP-1252 в UTF-8? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть файлы CSV, сохраненные из Excel, это 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 в Notepad ++, Encoding > Character Sets > Western European > Windows-1252,посмотрите правильные символы, затем Encoding > Convert to UTF-8.Однако есть много файлов, и я хочу, чтобы Ruby справился с этим.

Схожий: Как изменить кодировку при разборе CSV в Rails .Но это не объясняет, почему это не удается.

Ruby 2.4, Ссылка: https://ruby -doc.org / core-2.4.3 / IO.html # method-c-read

1 Ответ

0 голосов
/ 02 июня 2018

Ого, это было вызвано дерьмовым grep в DevKit.

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

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

Мне также не понадобились .encode('utf-8').

Пусть это будет уроком детям.Никогда не принимаю ничего само собой разумеющимся.Доверяй никому !

...