Ruby to_json Problem mit Fehler "illegal / missformed utf-8"

8

Ich habe einen Fehler JSON::GeneratorError: source sequence is illegal/malformed utf-8 beim Versuch, einen Hash in JSON-String zu konvertieren. Ich frage mich, ob das etwas mit Kodierung zu tun hat, und wie kann ich machen, dass to_json einfach \ xAE behandelt, wie es ist?

%Vor%     
ccy 05.08.2013, 20:33
quelle

2 Antworten

13

\xAE ist kein gültiges Zeichen in UTF-8, Sie müssen stattdessen \u00AE verwenden:

%Vor%

Oder konvertieren Sie es entsprechend:

%Vor%     
Stefan 05.08.2013, 21:00
quelle
13

Jede Zeichenfolge in Ruby hat eine unterlagerte Codierung. Abhängig von Ihren Umgebungsvariablen LANG und LC_ALL kann die interaktive Shell Ihre Strings in einer bestimmten Kodierung ausführen und interpretieren.

%Vor%

(Ignoriere, dass ich Ruby 1.9 anstelle von 2.0 verwende, die Ideen sind immer noch die gleichen).

__ENCODING__ gibt die aktuelle Quellcodierung zurück. Ihr wird wahrscheinlich auch UTF-8 sagen.

Wenn Sie literale Zeichenfolgen erstellen und Byte-Escapes (die \xAE ) in Ihrem Code verwenden, versucht Ruby dies entsprechend der String-Codierung zu interpretieren:

%Vor%

Also wird versucht, das Byte \xAE am Ende Ihrer Literal-Zeichenfolge als UTF-8-Stream-Byte zu behandeln, aber es ist ungültig. Sehen Sie, was passiert, wenn ich versuche, es zu drucken:

%Vor%

Sie müssen entweder das registrierte Zeichen in einer gültigen UTF-8-Codierung angeben (entweder mit dem echten Zeichen oder mit den zwei UTF-8-Bytes):

%Vor%

Wenn Ihre Eingabe ISO-8859-1 (Latin 1) lautet und Sie dies sicher wissen, können Sie Ruby anweisen, Ihre Zeichenfolge als eine andere Codierung zu interpretieren:

%Vor%

Ich hoffe, es hilft.

    
yonosoytu 05.08.2013 21:02
quelle

Tags und Links