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?
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.
(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:
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:
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.