😈

Ruby Rails そのCSVどんな文字コードだろうと取り込んでやるよ

2024/04/17に公開

文字コード...

...日本で開発をしている皆さん。こんにちは。文字コードです😈

もう嫌なんだ

  • CSVが取り込めない?
  • 文字コード?
  • UTF-8?
  • SHIFT-JIS?
  • BOM?
  • BOM付?え?
  • ローカルではいける?
  • あの人は取り込めないらしい?
  • Macならいける?
  • Windowsならいけない?
  • エクセルで開いた?
  • メモ帳で保存して?
  • スプレッドシートから出力?
  • 取り込めないんですけど😡?
  • こっちでは取り込めるんだよなあ?
  • ああああああああああああああああああ

どんなものでも取り込めるそんな魔法のような実装はないのかね

あるかもしれない、ないかもしれない。
僕が辿り着いたところはここまでだ。
効率がいいか?そんなことはしらん。
いいから魔改造だ!

require 'csv'
require 'nkf'

def import_csv(file_param)
  # どんなものでも取り込めるように魔改造
  file_encoding = NKF.guess File.read(file_param.path)
  File.open(file_param.path,
            "rt:BOM|#{file_encoding}",
            universal_newline: true,
            undef: :replace,
            invalid: :replace,
            replace: '') do |file|
    CSV.new(file,
            liberal_parsing: true,
            headers: true,
            converters: nil,
            header_converters: :symbol,
            skip_lines: /^(?:,\s*)+$/,
            col_sep: ',',
            quote_char: '"').each do |row|
      product = Product.find_by(id: row['ID'])
      product.update(name: row['名前'], price: row['価格'])
    end
  end
end

参考にさせていただきました

https://qiita.com/kurashita/items/df51e69a3426b3ba007f

Discussion