2012-12-11 3 views
13

Wenn ich rake test ausführen, erhalte ich jedes Mal eine Fehlerzeile.Rake Test und Fehler: Protokoll schreiben fehlgeschlagen. " xE2" von ASCII-8BIT nach UTF-8

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

Bitte führen Sie auf diese. So entfernen Sie diesen Fehler

+0

Hmm, was in der Backtrace, dass die Log-Schreib ausführt? Ich denke, die erste Frage ist zu bestimmen, ob der "\ xE2" -Wert im Speicher von Ihrem Code erstellt wird, persistiert und von der Datenbank abgefragt wird oder vom Framework erstellt wird. –

Antwort

16

Sie haben wahrscheinlich irgendwo in Ihrem Code versuchen, String ausgeben, deren Codierung falsch ist oder einige seltsame Zeichen und die Codierung funktioniert nicht.

Richtiger Weg wäre, die Zeichenfolge zu finden, die zu Problemen führt und herauszufinden, warum es in der falschen Codierung ist. Siehe Codierung und force_encoding in der Zeichenfolge api (http://ruby-doc.org/core-2.2.0/String.html).

Wenn Sie nur in der Lage sein möchten, diese Zeile im Protokoll zu drucken und den Fehler zu vermeiden, können Sie das folgende Verfahren mit dieser Zeichenfolge ausführen.

+0

Rubydoc Link ist 404. – ablarg

+0

@holli, das erste 'str' Zuordnung ist nicht ganz richtig. Da Sie für die String-Konstruktion einfache Anführungszeichen verwenden, wird das '\ x' nicht berücksichtigt. Ihr Beispiel muss aktualisiert werden, um zu sein: 'str =" hier ist eine Zeichenfolge mit falscher Codierung und lustigen Zeichen wie \ xE2 "' und auf diese Weise können Sie das Problem in der Rails-Konsole korrekt reproduzieren. Wenn ich die Anführungszeichen für die Zuweisung verwende und '.encode' nicht aufruft, kann ich den Fehler, der für mich so aussieht, jetzt korrekt reproduzieren:' ArgumentError: Ungültige Bytefolge in UTF-8'. – stwr667

4

Verwenden Sie postgresql? Ihre Datenbank verwendet möglicherweise SQL_ASCII. Sie können überprüfen, ob es ausgeführt wird psql template1 -c 'show server_encoding' Löschen Sie den Datenbankcluster, und initialisieren Sie es mit initdb -E utf8 /path/to/database neu.

+0

da dies wahrscheinlich ist Rails vergessen Sie nicht, Sie können direkt auf Ihre Datenbank zugreifen mit Rails db und dann einfach 'show server_encoding eingeben; 'sans zitiert offensichtlich. – engineerDave

1

In meinem Fall einige seltsame Anführungszeichen waren die Täter so ersetzte ich sie nur mit den sicheren Zeichen wie diese,

msg = error.message.gsub(/[“”]/, "\"").gsub(/[‘’]/,"\'")