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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

3回答

2457閲覧

rubyでutf-8以外のcsvファイルをインポートする方法

shimazu

総合スコア38

CSV

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/11/07 11:48

以下のサイトを参考にrailsでcsvファイルの読み込みを行いました。

https://ruby-rails.hatenadiary.com/entry/20141120/1416483136
書いてある通り全て行うことができましたが、読み込むファイルをutf-8以外にしたところ

invalid byte sequence in UTF-8

というエラーが出ます。どのようにすればいいでしょうか?

試したこと、

rb

1# app/models/product.rb 2 UTF8_CONVERTER = ->(field) { field.encode('utf-8', invalid: :replace, undef: :replace, replace: "") } 3 4 def self.import(file) 5 CSV.foreach(file.path, encoding: "Shift_JIS", converters: UTF8_CONVERTER, headers: true) do |row| 6... 7 8... 9 end 10 end 11

とすれば

"\xEE\x9D" from Shift_JIS to UTF-8

というエラーが出ました。
また全てのファイルがダメなわけでは無いので、特定の文字列がエラーの元になっていると予想しています。

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

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

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

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

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

guest

回答3

0

自己解決

CSVの変換がおかしかったようです。
もともとのコードでもいけましたし、文字コードに合わせて回答のように処理すればうまく処理できました。

投稿2018/11/13 00:12

shimazu

総合スコア38

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

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

0

"\xEE\x9D"は、Shift_JISでは未定義領域です。
マイクロソフトの漢字コードだと、NECのPC用漢字コードをもとにしているので、このエリアには「NEC選定IBM漢字」という種類の独自漢字コードが入っています。

asmさんの回答のように、encoding:に、"Windows-31J"または"CP932"または"SJIS"を指定してください。

投稿2018/11/07 13:48

otn

総合スコア84487

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

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

shimazu

2018/11/07 13:57 編集

全て "\x90" followed by "\x04" on Windows-31J というエラーがでます ちなみにですが、上の試したこと。。。のShift_JISの部分をそれぞれ変えてみました。
guest

0

encoding: Encoding::CP932
だと結果が変わったりしませんか?

投稿2018/11/07 12:03

asm

総合スコア15147

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

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

shimazu

2018/11/07 13:56

"\x90" followed by "\x04" on Windows-31J というエラーがでます
asm

2018/11/07 21:21

文字コードが何かはわからないのでしょうか?
shimazu

2018/11/07 21:24

excelをcsv保存したものなのでShift_JISだと思います。 調べる方法をご存知なら教えていただきたいです。
asm

2018/11/07 21:40

pure ruby的には NKF.guess IO.binread(file.path) gem使うならcharlock_holmes もしくは、普通にテキストエディターで読み込む なんとなく、Excel2016以降できるようになったらしいutf8のcsvが混じってるんじゃという気がしてます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問