2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-05

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

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

お試しください^^

2
1
4

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
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?