[Rails] SJISのエクスポートでの「ActionView::Template::Error (U+2212 from UTF-8 to Windows-31J):」のエラー対応

RailsでSJISのエクスポートを行うときにテンプレート側で出るこのエラー。

そもそもUTF8でエクスポートさせてよと思うのですが、CSVファイルをExcelで見れるようにしてねという依頼がある限りSJISエクスポートはなくならないのでしょう。

主にあるSJIS変換時にエラーとなる文字コードは以下など。

文字コード(UTF-8) 文字 備考
U+00F8 Ø Oにストロークが付いたラテン文字
U+00A2 ¢ セント記号(通貨)
U+00A3 £ ポンド記号(通貨)
U+00AC ¬ NOT記号
U+2013 短いenダッシュ
U+2014 長いemダッシュ
U+2016 DOUBLE VERTICAL LINE
U+203E オーバーライン
U+2212 ハイフンマイナス
U+203A SINGLE RIGHT
U+301C 波ダッシュ

 

個別にlibなどに関数を作って対応させていたりしたのですが、やや煩雑になったり。

その時に見つけたのがこちらの記事です。

★参考記事
https://qiita.com/yugo-yamamoto/items/0c12488447cb8c2fc018

確かに一旦、全てをSJISからUTFに変換し、それをSJISに戻せばエラーは出ない。

かなり見事な変換だったのと、Stringクラスへ拡張を行なっているので使いやすい使いやすい。

そして、やや置き場所に悩むStringなどのコアクラスへの派生クラスの置き場所。

「lib」配下に置くというのもアリですが、「core_ext」などのコアクラスの置き場を用意してそこで実施していくというのが管理的にも良さそうですね。

★参考記事
https://stackoverflow.com/questions/5654517/in-ruby-on-rails-to-extend-the-string-class-where-should-the-code-be-put-in

ファイル的には以下になるかと。

使い方は文字列に対して「sjisable」メソッドを適用するだけなので使い勝手が非常に高いです。

さらっと便利さ抜群です。