Как читать CSV на основе кодировки в Ruby on Rails - PullRequest
0 голосов
/ 28 сентября 2018

Я использовал https://github.com/roo-rb/roo для разбора файла CSV в Ruby on Rails.Код следующий как

data = Roo::CSV.new(obj.public_url, csv_options: {encoding: Encoding::ISO_8859_1})

При открытии файла CSV, закодированного в формате UTF-8, возникает проблема.(Отображаются неизвестные символы.)

Есть ли какое-либо решение для чтения файла CSV любой кодировки?

Или Как я могу получить тип кодировки файла CSV?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Я предполагаю, что ваш CSV-файл получен из URL.Если это так, то вам нужно использовать open-uri для потоковой передачи файла и определить его кодировку с помощью следующего кода:

require 'uri'
en = open('obj.public_url').read.encoding => #<Encoding:UTF-8>

Затем вы можете использовать roo для чтения файла CSV справильная кодировка.

data = Roo::CSV.new(obj.public_url, csv_options: {encoding: en})
0 голосов
/ 28 сентября 2018

Я думаю, что вы указываете CSV для кодирования как ISO-8859-1 ({encoding: Encoding::ISO_8859_1}), и если вы пытаетесь открыть CSV как UTF-8, он покажет странные символы на тех символах, которые не принимаютсяпо ISO.

Я предлагаю попробовать другие варианты, чтобы попросить Roo кодировать файл как UTF-8:

data = Roo::CSV.new(obj.public_url, csv_options: {encoding: Encoding::UTF_8})
0 голосов
/ 28 сентября 2018

Не могли бы вы попробовать без параметра csv_options?

Или попробуйте обычное:

File.read('foo.csv').encoding => #<Encoding:UTF-8>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...