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

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

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

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

Ruby

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

2回答

784閲覧

CSVの文字化けについて

yuzujoe

総合スコア49

CSV

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

Ruby

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/05/05 10:53

前提・実現したいこと

rubyのクローラーを開発の際に結果をcsvに吐き出しエクセルファイルで確認した際に文字化けが起こってしまい
エラーというエラーではないのですが質問させて頂きます。

発生している問題・エラーメッセージ

これが取得された値 Ruby開発キャッシュ類似ページ エクセルファイルに表示した時 Ruby髢狗匱繧ュ繝」繝・す繝・鬘樔シシ繝壹・繧ク

該当のソースコード

ruby

1File.write('rank.csv', "\uFEFF", encoding: 'utf-8') unless File.exist? 'rank.csv' 2 CSV.open('rank.csv', 'w:utf-8') do |rank| 3 rank << ["Keyword","Rank","Title","URL"] 4 rank << ["#{keyword}","#{i+1}","#{value[:title]}","#{value[:url]}"] 5 end

試したこと

https://teratail.com/questions/122321

こちらの投稿者様を参考にさせて頂いて実装したのですが上手く文字化けの解消はされておりません。

補足情報(FW/ツールのバージョンなど)

Ruby -v 2.5.1

よろしくお願い致します。
他に欲しい情報ございましたら添付致します

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

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

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

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

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

guest

回答2

0

参考にしたページだと

CSV.open(csvname, 'a:utf-8'){|csv| csv << shop_inf_list}

こうなっています。
a:utf-8なので追記モードで開いているように見えますね。

CSV.open('rank.csv', 'w:utf-8') do |rank|

こちらだとw上書きモードになっているので、BOMを消してしまっているのではないでしょうか。

投稿2019/05/05 11:10

otolab

総合スコア765

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

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

yuzujoe

2019/05/06 08:40

ありがとうございます。 プログラム的なエラー自体はencodeを指定しなくてもいいのですがエクセルファイルに表示の際は別でエクセル側で受け取りの設定などが必要なのでしょうか? https://primarytext.jp/blog/1275#UTF-8 こちらの記事を見て疑問に思いましてもしご存知でしたらご教授頂けないでしょうか?
otolab

2019/05/06 10:29

CSVはテキストファイルなので、もともと文字コードの指定ができません。 エクセルはCSVファイルを読み込む場合は(たぶんバージョンにもよりますが)shift-jisであると仮定して読み込むため、UTF-8で書かれたCSVファイルは文字化けして読み込まれます。 手はいくつかあり、主に下記の手法があります。 ・Excelで文字コードを指定して読み込ませる ・Shift-jisでCSVを作る ・BOMをつける https://teratail.com/questions/122321 の手法ではBOMをつける方法を採用しているように見えます。上手く動かないと言っているこの記事のコードも同様の手法を使おうとしているように見えるのですが、、、 CSVの本体を書き出すときに、予め書き込んでおいたBOMを上書きして消してしまっているように見えます。(というのが本回答の意味です) まあ、3通りのどれかでいけるはずなので、目的に合わせて楽な方法を使うといいと思います。
otolab

2019/05/06 10:32

(ちなみに)BOMはテキストファイルの頭に文字コード指定の値を強引にくっつけて(変なテキストファイルにすることで)問題を解決する手法です。 "\uFEFF" というのがソレです。
yuzujoe

2019/05/06 10:52

ありがとうございます 私もそれを直接指定したのですが直らずでした。 またmac特有の問題だったようでして解決致しました。 この度はありがとうございました。
guest

0

自己解決

こちらの問題ですがコードのoutput結果ではなく生成されたcsvファイルの設定の問題だったようでmacはshift-JISで設定しないといけないようでした。

結果として生成されたcsvファイルを毎度編集しなければいけないことがわかりました

お騒がせ致しました

投稿2019/05/06 10:51

yuzujoe

総合スコア49

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

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

otolab

2019/05/06 10:53

気になるので、 > CSV.open('rank.csv', 'w:utf-8') do |rank| を > CSV.open('rank.csv', 'a:utf-8') do |rank| にしたときにどうなるのかだけはやってもらえませんか?(気になる。。。)
yuzujoe

2019/05/06 10:56

同様に文字化けは起こしていました 本当にお付き合い頂きましてありがとうございました!!
otolab

2019/05/06 12:18

なるほど。。そうでしたか。 おつかれさまでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問