Почему Ruby не может конвертировать CP-1252 в UTF-8?
У меня есть файлы 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
1 ответ
Вау, это было вызвано дерьмом grep
в DevKit.
>rake import:csv["../file.csv"]
... name: "O'Brien ...
>where grep
C:\DevKit2\bin\grep.exe
Мне тоже не нужно .encode('utf-8')
,
Пусть это будет уроком детям. Никогда не принимаю ничего само собой разумеющимся. Не доверяй никому!