社会人から始めたプログラミング

プログラミング、エンジニアに関することでの備忘録、シェアしたい情報などを共有するためのブログです。

Ruby、Railsをつかって、エクセル excel のファイル名を設定して、エクスポートする場合に文字化けする文字、「表」をなんとかした。

RubyでShift-JISにすると文字化けする文字コードをなんとかする。

今回やりたかったこと

  • 日本語の「表」の文字をRubyで設定したファイル名が文字化けしないようにすること。 例えば、「当番表_2017-06-05.xlsx」的なファイル名のファイルを作りたかった。

問題

  • Shift-JISの「表」は文字化けすると、後ろの文字の文字コードによって、様々な文字に代わってしまう。

例えばどういう風に文字化けするか、詳しくはこちらを参照のこと。

:: Shift-JISの文字化けについて | KENT-WEB ::

対応方法

filename = "当番".encode("Shift_JIS", "UTF-8") + "\x95\x5C\x5C".force_encoding("Shift_JIS") + "_#{Time.now.strftime('%Y%m%d')}.xlsx".encode("Shift_JIS", "UTF-8")

今回は文字化けする「表」だけShift-JISの文字コードで表現し、それを足す方法で解決した。

エクセルはUTF-8だと基本的には文字化けしてしまうので、 #force_encoding にて文字コードをShift-JISに強制指定することで encodeingがShift-JISの状態で文字列を足すことができるようになり、 Shift-JISのファイル名の出来上がり。

#force_encoding の説明はこちら

ref.xaio.jp

他の方法

  • そもそも日本語のファイル名にしないという手もあり。