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

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

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

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

Q&A

解決済

1回答

494閲覧

rubyで文字コードエラー?になる

kozica

総合スコア58

Ruby

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

0グッド

0クリップ

投稿2018/12/03 06:04

編集2018/12/03 06:45

下記にようにファイルの中身を並べから別ファイルに保存するようにしました。
サンプルファイルではうまいってたのですが、本番ファイルですると
下記一番最後のようなエラーが出てきました。

原因はファイル内のテキストに下記のような記述が含まれているからのようです。
,(̤¸¡½Ð),
上記までの処理はうまくいきこの文字の行でエラーが出ているので原因は間違いなくここかと思います。

しかし、これをどうすればエラーがなくなるかわかりません。
力を貸してほしいです

ruby

1File.open("csv/var/log/authlog") do |file| 2 File.open("dl/authlog","a") do |f| 3 file.each_line do |line| 4 p line 5 row = line.split(",") 6 if row.size > 15 7 puts [row[0],"",row.last,"","",row[10],"","",row[8],"",row[9],row[3]+"/"+row[4],row[6],row[7],"","",row[12],"",row[13]+","+row[14],"","",row[5],row[11],"","","","","","",""].join(",") 8 else 9 puts [row[0],"",row.last,"","",row[10],"","",row[8],"",row[9],row[3]+"/"+row[4],row[6],row[7],"","",row[12],"",row[13],"","",row[5],row[11],"","","","","","",""].join(",") 10 end 11 end 12 end 13end 14 15layout_ch.rb:24:in `split': invalid byte sequence in UTF-8 (ArgumentError) 16

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

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

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

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

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

guest

回答1

0

ベストアンサー

"csv/var/log/authlog"のファイルの中に、UTF-8としては不正な文字が入っているためです。
原因としては、そのファイルの中味のエンコーディングがUTF-8でない、または、UTF-8ファイルへの不正な文字の混入のどちらかです。エンコーディングはUTF-8で間違いないでしょうか?

UTF-8と違う場合、正しいエンコーディングでopenする。
例:File.open("csv/var/log/authlog","r",encoding: "ISO-8859-1:utf-8")

UTF-8で合っている場合、不正な文字を置換する。
例:row = line.scrub.split(",")

投稿2018/12/03 06:52

otn

総合スコア84499

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

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

kozica

2018/12/03 07:03

otnさんいつもありがとうございます。 以前はシェルの方でこのエラー解決をして頂きましたが、rubyでどうするのがベストかわからず質問いたしました。 each_lineで1行1行"line.encoding"で確認していくと、全部UTF-8となっていたので、提案して頂いた下のほうで実行しうまく動きました! わかりやすい回答ありがとうございます。
otn

2018/12/03 07:06

> each_lineで1行1行"line.encoding"で確認していくと、全部UTF-8となっていたので、 いや、それはRuby側でUTF-8と見なしているのでUTF-8と表示されるのは当たり前です。 ファイルの中味を直接見ないとエンコーディングは分かりません。
otn

2018/12/03 07:07

文字コードの自動判別機能を持ったエディタでひらくか、nkf --guess で調べるか、など。
asm

2018/12/03 07:19

他アプリケーション/スクリプトとの連携を考える場合 ファイルを開く際にencoding指定をしないというのは私はとても怖いです。(Ruby界隈に蔓延ってるんですけどね) 主にWindowsで動かそうとした際にハマります。
otn

2018/12/04 01:09 編集

そうですね。自分で調べる方法を書きましたが、入力ファイルのエンコーディングが何であるかは本来はシステム仕様に含まれていないとおかしい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問