地方でリモートワーク in Iwate

東京の受託開発会社でリモートワークしてます。

activeadminのcsvダウンロード(SJIS)でエンコードエラーが起きたので対処してみた

スポンサーリンク

activeadminでSJISでcsvダウンロードしたかったので、optionを渡しました。

# config/initializers/active_admin.rb
config.csv_options = { encoding: 'CP932' }

しかし、これだとエンコードエラー。

モンキーパッチを当ててみました。 encodeメソッドを繰り返して、SJISエラー回避してます。 あまりきれいじゃないけど、これでいけました。

# config/initializers/monkey_patches/active_admin.rb:
module ActiveAdmin
  class CSVBuilder
    def encode(content, options)
      if options[:encoding]
        content.to_s.encode("Windows-31J","UTF-8",invalid: :replace, undef: :replace).encode("UTF-8", "Windows-31J").encode("Windows-31J","UTF-8")
      else
        content
      end
    end
  end
end