やりたい事
RoRアプリケーションの開発の中で、csvを作成する機能があります。
複数のcsvの変換不可の文字を取り扱いたい
困っている事
csvを作成する際、Shift_jisからUTF-8に変換をして、csvを作成したいのだが、
Shift_jisからUTF-8の変換不可文字をどのように選定して、実装すれば良いのでしょうか。
同時に、変換不可時のエラー処理も実装出来たらいいなと思っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
Shift_jisからUTF-8の変換不可文字
は、無いと思うのですが、何かありますでしょうか?
逆はたくさんありますが。
投稿2020/01/22 14:42
総合スコア84555
0
基本的には以下のようなメソッドで変換エラー時の例外を捕捉するなりして対応すると思うのですが、どうでしょう。変換のオプションを指定することで様々な対応が取れます。
instance method String#encode - Ruby 2.7.0リファレンスマニュアル
Ruby on Railsやその他特有の事情があるのであれば上記では対応しきれないのかもしれませんが、ご参考まで。
投稿2020/01/22 01:36
総合スコア9183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア37
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/31 09:40
2020/01/31 11:37
2020/01/31 11:46
2020/01/31 12:33
2020/02/01 07:55
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/22 15:00
2020/01/31 08:58
2020/01/31 09:09
2020/01/31 09:20