質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

2053閲覧

Shift_jis(CP932) -> UTF-8へのcsvの変換機能

nako01

総合スコア37

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

1グッド

2クリップ

投稿2020/01/21 14:02

やりたい事

RoRアプリケーションの開発の中で、csvを作成する機能があります。
複数のcsvの変換不可の文字を取り扱いたい

困っている事

csvを作成する際、Shift_jisからUTF-8に変換をして、csvを作成したいのだが、
Shift_jisからUTF-8の変換不可文字をどのように選定して、実装すれば良いのでしょうか。

同時に、変換不可時のエラー処理も実装出来たらいいなと思っています。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Shift_jisからUTF-8の変換不可文字

は、無いと思うのですが、何かありますでしょうか?
逆はたくさんありますが。

投稿2020/01/22 14:42

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2020/01/22 15:00

波ダッシュとバックスラッシュがどう変換されるのかには注意が必要ですかね
nako01

2020/01/31 08:58

Shift_jisの範囲外の文字の対処をしたかったです!
Y.H.

2020/01/31 09:09

> Shift_jisの範囲外の文字の対処をしたかったです! 「Shift_jisからUTF-8の変換」に於いてソースとなるのが「Shift_jis」なので 「Shift_jisの範囲外の文字」は存在しないので対処する必要ないのでは? ということです。 cp932(MS932) - Shift_jis の部分のことを問われてます?
nako01

2020/01/31 09:20

その部分です! はしご高などは、範囲外ですね。
guest

0

基本的には以下のようなメソッドで変換エラー時の例外を捕捉するなりして対応すると思うのですが、どうでしょう。変換のオプションを指定することで様々な対応が取れます。
instance method String#encode - Ruby 2.7.0リファレンスマニュアル

Ruby on Railsやその他特有の事情があるのであれば上記では対応しきれないのかもしれませんが、ご参考まで。

投稿2020/01/22 01:36

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/01/22 01:37

他の方々が実務においてどのような対応を取られているのか、個人的に興味のあるご質問です。
nako01

2020/01/22 04:17

ありがとうございます! こちらの記事を参考に実装してみます。 gemで 'charlock_holmes'というものがあるみたいですが、こちらでも実装してみます!
nako01

2020/01/31 09:18

アドバイスありがとうございました。。! とりあえず、解決は致しました!
nako01

2020/01/31 09:21

一応解決は致しましたが、、無理やり感が半端ないので、もし、何か他に不足な点がございましたら、 ご教授お願い致します!
guest

0

自己解決

沢山のアドバイスありがとうございました!!
自己解決致しましたので、記載致します。

そもそも、Shift_jisからUTF-8の変換時に起こるエラーは少なく、
やりたい事としてはShift_jisの範囲外の文字をどう対処するか。

Shift_jisの範囲外の文字 → 「髙、①」などのShift_jisに存在しない旧文字。

・Shift_jisで書かれたcsv(髙を含む)をUTF-8に変換する際、 "\xFB\xFC" from Shift_JIS to UTF-8このようなエラーが出るかと思います。
これは、Shift_JIS の範囲外の文字が含まれていますよ。というエラー。

なので、私は、Shift_jisからUTF-8に変換するのではなく、
強制的に、最初からUTF-8として読み込んでもらう事にしました!

before

1CSV.foreach({ファイル名}, encoding: "Shift_JIS:UTF-8", headers: true) do |row|

after

1CSV.parse(NKF::nkf('-w',File.read({ファイル名})), headers: true) do |row|

これで、解決。。!

だが、もっと簡単な方法が。。(コメント欄にてアドバイスを頂きました。(というか、、回答を。。!))
上記の回答は、遠回りしていたので、、

CSV.foreach({ファイル名}, encoding: "CP932:UTF-8", headers: true) do |row|

CP932:UTF-8のところCP932を指定するだけで、エラーを出す事なく変換出来ました!

※②の場合は、windowsで作られたファイルを考慮していないので、
windowsで作られたファイルの場合はエラが起きます。

mac,windowsと両方を対応したいのであれば、やはり①の実装が好ましい。

投稿2020/01/31 09:16

編集2020/02/03 09:26
nako01

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2020/01/31 09:40

> encoding: "Shift_JIS:UTF-8" encoding: "CP932:UTF-8" にするだけで対応できませんか?
nako01

2020/01/31 11:37

!!で、出来ました。。! 何故なのでしょう・・・。 一週間ずっと考えていたのですが、、まさかです。 ありがとうございます
nako01

2020/01/31 11:46

記事も編集させて頂きました!ありがとうございます!
nako01

2020/02/01 07:55

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問