Импорт / анализ рельсов из отсутствующей колонки CSV UTF-8 - PullRequest
0 голосов
/ 31 октября 2019

Итак, я работаю над тем, чтобы позволить пользователям импортировать данные из файла CSV. Прямо сейчас все поля будут импортированы правильно, кроме первого поля.

Я обнаружил, что тип файла влияет на импорт.

Мой код выглядит следующим образом:

class Import < Operation
require 'csv'
def call(file, training_event_id)
  csv_data = CSV.parse(file.read, headers: true)
  list_occo = []
  csv_data.each do |row|
    occupant = Occupant.new
    occupant.account_number = row['Account Number']
    occupant.check_in = row['Check In']
    binding.pry
    occupant.training_event_id = training_event_id
    list_occo << occupant
  end
  binding.pry
  occo_errors = check_file(list_occo)
  list_occo.each(&:save) if occo_errors.empty?
  return occo_errors
end

Когда я выполняю привязку и проверяю пассажира, при выполнении CSV UTF-8 я получаю ноль на счете. Если я переключусь на прямой CSV, не проблема. Есть ли способ конвертировать / переключить CSV UTF-8 в CSV? Я думал / пытался использовать какую-то кодировку при разборе, например: encoding: 'iso-8859-1', но это не сработало.

Есть ли способ конвертировать CSV UTF-8 или есть? способ сделать прямую проверку формата файла, чтобы убедиться, что он CSV, а не CSV UTF-8?

1 Ответ

1 голос
/ 01 ноября 2019

На всякий случай, если кто-нибудь столкнется с этой проблемой в будущем. Я посмотрел на файл в консоли rails с помощью CSV.read (file.path) и заметил U + FEFF, предшествующий заголовку первого столбца. Есть кроличья нора информации о проблемах спецификации и UTF-8. Не желая делать CSV / File.open, я пытался сделать что-то вроде деления, gsub, проверки файлов на utf-8 и т. Д. Затем я просто изменил строку csv_data на:

csv_data = CSV.parse(File.read(file, encoding: 'bom|utf-8'), headers: true)

Затем вмой контроллер я обновил его с (params [: file]) до (params [: file] .path), так как я получал ошибку

без неявного преобразования ActionDispatch :: Http :: UploadedFileв строку

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...