search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Shift_jis(CP932) -> UTF-8変換の例外処理

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に変えただけ)

こちらでも、文字化け、エラーを防ぐ事が出来ます!

お試しください^^

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?