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
他の方法
- そもそも日本語のファイル名にしないという手もあり。