の3つがある。
csvダウンロードするために、utf-8をsjisに変換する必要があった。
kconvを用いる方法
Kconvは自動的に、MIMEをデコードしたり、半角カタカナを全角カタカナに変換したりする。
このような動作を好まない場合は、NKF モジュールを直接用いる必要がある。
ちなみに、Kconvは内部ではNKFを用いて変換を行っている。
kconvを使うのが一番手軽そうだったので、
コントローラでrequire 'kconv'して、
kconvのtosjisを使ってたら基本的にうまくいってたんだけど、
國とか學とかの旧字体の変換で文字化けした。
require 'kconv' '学'.tosjis #=> '学' '學'.tosjis #=> 文字化け
文字コード変換には、入力された文字の文字コードを認識し、指定の文字コードへ変換する。
入力のとき、tosjisは文字コードを自動判定しているんだけど、誤判定が多いらしい。
だから、入力の時の文字コードを指定する必要がある。
require 'kconv' '学'.kconv(Kconv::SJIS,Kconv::UTF8) #=>'学' '學'.kconv(Kconv::SJIS,Kconv::UTF8) #=>'學'
うまくいくようになった。
ちなみに、他の文字コードの場合は以下。
strは何らかの文字列とする。
変換前コード | 変換後コード | 自動判定 | 入力文字コードを指定 |
---|---|---|---|
EUC-JP | Shift_JIS | str.tosjis | str.kconv(Kconv::SJIS, Kconv::EUC) |
EUC-JP | JIS | str.tojis | str.kconv(Kconv::JIS, Kconv::EUC) |
Shift_JIS | EUC-JP | str.toeuc | str.kconv(Kconv::EUC, Kconv::SJIS) |
EUC-JP | UTF-8 | str.toutf8 | str.kconv(Kconv::UTF8, Kconv::EUC) |
EUC-JP | UTF-16 | str.toutf16 | str.kconv(Kconv::UTF16, Kconv::EUC) |
nkfを用いる方法
次にnkfを使ってみた。
nkfを使う場合でも、入力時の文字コードを自動判定にすると、文字化けする。
require 'nkf' NKF.nkf('-s','学') #=> '学' NKF.nkf('-s','學') #=> 文字化け
というわけで、入力時の文字コードを指定。
require 'nkf' NKF.nkf('-W -s','学') #=> '学' NKF.nkf('-W -s','學') #=> '學'
うまくいった。
ちなみに、他の文字コードの場合は以下。
変換前コード | 変換後コード | 自動判定 | 入力文字コードを指定 |
---|---|---|---|
UTF-8 | Shift_JIS | NKF.nkf('-s', str) | NKF.nkf('-W -s', str) |
EUC-JP | JIS | NKF.nkf('-j', str) | NKF.nkf('-E -j', str) |
Shift_JIS | EUC-JP | NKF.nkf('-e', str) | NKF.nkf('-S -e', str) |
JIS | UTF-8 | NKF.nkf('-w', str) | NKF.nkf('-J -w', str) |
参考ページ
Rubyist Magazine - 標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv
お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。