Shift_jis(CP932) -> UTF-8へのcsvの変換機能
今回はrubyで開発をしたので、rubyの書き方で説明致します。
Shift_jisで書かれたcsvをUTF-8に変換する機能を実装した際、エラーが起きてしまい変換出来ない件について。
課題
エラー文
"\xFB\xFC" from Shift_JIS to UTF-8
コード
CSV.foreach({ファイル名}, encoding: "Shift_JIS:UTF-8", headers: true) do |row|
Shift_JIS→UTF-8に変換してcsv出力したいのに、、エラーが。。
何を言っているんだ?
どーいうエラー?
どう対処すれば、、。
何が起きている??
このエラー文は、変換出来ない文字が含まれているよー!だから変換出来ません!
と教えてくれています。
変換出来ない文字とは、Shift_JISの範囲外の文字(旧字体)
の事!
→Shift_JISで書かれたcsvに、Shift_JISが認識出来ない文字が含まれてる。
Shift_JISが認識出来ない文字(Shift_JISにはない文字):
「髙(はしご高), ①, ㈱, 﨑, ✖︎」などの旧字体!
csvにこの旧字体が含まれている事によって、エラーが起きてしまいます。
例)
sample.csv :
山田花子,前田敦子,髙田啓介 ← 「髙」が紛れ込んでいる
解決策
解決策は何通りかありますが、(1)一番確実に変換出来るものと、(2)簡単に変換出来るものをご紹介します!
(1) 強制変換
初めから、UTF-8としてcsvを読み込ませる!
CSV.parse(NKF::nkf('-w',File.read({ファイル名})), headers: true) do |row|
Shift_JIS → UTF-8 ( Shift_JISで書かれたcsv を UTF-8に変換する!)
のではなく、
Shift_JISで書かれたcsvを初めからUTF-8として変換する
初めからUTF-8として変換する事によって、文字化けも起こる事なく、エラーも回避する事が出来ます!
(2) CP932を使う
単純です
CSV.foreach({ファイル名}, encoding: "CP932:UTF-8", headers: true) do |row|
Shift_JIS → UTF-8
CP932 → UTF-8
(ただ、Shift_JISをCP932に変えただけ)
こちらでも、文字化け、エラーを防ぐ事が出来ます!
お試しください^^