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

[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」メソッドを適用するだけなので使い勝手が非常に高いです。

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

 

このブログは株式会社CoLabMixによる技術ブログです。

GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。

Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。

開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。

お問い合わせやご依頼・ご相談など

     

    関連記事

    1. Elasticsearch 6 を使ったデータ検証 その5( クエリ …

    2. DjangoでWebアプリケーションを作成してみる その2(ubunt…

    3. Firefoxの「RESTClient」からPOSTの値の送信

    4. IT完全未経験からWebエンジニア転職の為に行った活動

    5. CentOS6 + Apache2 を無料のSSL「Let's Enc…

    6. Vue.jsで申し込み同意でボタンをアクティブにするチェックボタンの作…