2012-12-11 4 views
13

rake testを実行すると、毎回エラー行が表示されます。レーキテストとエラー:ログの書き込みに失敗しました。 " xE2"(ASCII-8BITからUTF-8へ)

log writing failed. "\xE2" from ASCII-8BIT to UTF-8 

これを参考にしてください。このエラーを取り除く方法。

+0

うーん、バックトレースでそのログの書き込みを行っているもの?最初の質問は、 "\ xE2"値がコードによってメモリに作成され、データベースから永続化され、クエリされたのか、フレームワークによって作成されたのかを判断することです。 –

答えて

16

おそらくコードのどこかに、エンコードが間違っているか、奇妙な文字があり、エンコードが機能しない文字列を出力しようとしています。

正しい方法は、問題の原因となる文字列を見つけて、間違ったエンコーディングが原因であるかどうかを調べることです。文字列api(http://ruby-doc.org/core-2.2.0/String.html)のencodingとforce_encodingを参照してください。

ログにその行を印刷してエラーを回避したい場合は、その文字列で次の手順を実行できます。

str = 'here is some string with wrong encoding and funny characters e.g. "\xE2"' 
# note if you do this in console, the str is encoded correctly 

# Rails.logger.info(str) # this would result in the error line 

# This will change the encoding and remove weird characters 
str = str.encode('utf-8', :invalid => :replace, :undef => :replace, :replace => '_') 

Rails.logger.info(str) # this now works 
+0

Rubydocのリンクは404. – ablarg

+0

@holliです。最初の 'str'の割り当ては正しくありません。文字列の作成に一重引用符を使用しているので、 '\ x'は尊重されていません。あなたの例は以下のように更新する必要があります 'STR =' とその方法「ここが間違ってエンコードと変な文字、例えば\ XE2でいくつかの文字列である」、あなたは正しくRailsのコンソールで問題を再現することができます。代入に二重引用符を使用し、 '.encode'を呼び出さないと、私はこのようなエラーを正しく再現できます:' ArgumentError:UTF-8の無効なバイト列 '。 – stwr667

4

postgresqlを使用していますか?データベースでSQL_ASCIIが使用されている可能性があります。 psql template1 -c 'show server_encoding'を実行して確認できます。データベースクラスタを削除し、initdb -E utf8 /path/to/databaseで再初期化します。私はちょうどこのような安全な文字でそれらを置き換えるので、私の場合は

+0

これはおそらくRailsはrails dbを使って直接データベースにアクセスし、次に 'show server_encoding;明らかにサンは引用している。 – engineerDave

1

は、いくつかの奇妙な引用符は、犯人だった

msg = error.message.gsub(/[“”]/, "\"").gsub(/[‘’]/,"\'") 
関連する問題