Ruby to_json Problem mit dem Fehler "illegal/fehlerhafte utf-8"
Ich bekam eine Fehlermeldung JSON::GeneratorError: source sequence is illegal/malformed utf-8
wenn Sie versuchen, zu konvertieren von hash in json-string. Ich Frage mich, ob dies hat nichts zu tun mit der Kodierung, und wie kann ich machen, to_json nur zu behandeln \xAE wie es ist?
$ irb
2.0.0-p247 :001 > require 'json'
=> true
2.0.0-p247 :002 > a = {"description"=> "iPhone\xAE"}
=> {"description"=>"iPhone\xAE"}
2.0.0-p247 :003 > a.to_json
JSON::GeneratorError: source sequence is illegal/malformed utf-8
from (irb):3:in `to_json'
from (irb):3
from /Users/cchen21/.rvm/rubies/ruby-2.0.0-p247/bin/irb:16:in `<main>'
- nur für den Fall du meinst "genauso zu behandeln, wie es ist', Sie könnten die doppelte Flucht: {"description"=> "iPhone\\xAE"}.to_json => "{\"description\":\"iPhone\\\\xAE\"}"
Du musst angemeldet sein, um einen Kommentar abzugeben.
\xAE
ist kein gültiges Zeichen in UTF-8 zu verwenden\u00AE
statt:Oder wandeln Sie es entsprechend:
Jeder string in Ruby hat eine unterliegende Codierung. Je nach
LANG
undLC_ALL
Umwelt-Variablen, die interaktive shell ausführen und interpretieren Sie Ihre Saiten in einem bestimmten encoding.(ignorieren, dass ich mit Ruby 1.9 anstelle von 2.0, die Ideen sind immer noch die gleichen).
__ENCODING__
gibt die aktuelle Quelle-Codierung. Deine wird wohl auch sagen UTF-8.Beim erstellen von Zeichenketten und byte verwenden entweicht (die
\xAE
) in Ihrem code, Ruby versucht zu interpretieren, dass gemäß der string-Codierung:So, das byte
\xAE
am Ende des literal-Zeichenfolge wird versucht werden, behandelt zu werden als UTF-8 byte-stream, aber es ist ungültig. Sehen, was passiert, wenn ich versuche, drucken es:Sie entweder müssen Sie die registrierten Zeichen in einem gültigen UTF-8-Codierung (entweder über den wahren Charakter oder die Bereitstellung der zwei UTF-8-bytes):
Oder, wenn Sie Ihre Eingabe ist ISO-8859-1 (Latin 1) und Sie wissen, dass es für Sie sicher, können Sie sagen, Ruby interpretieren die Zeichenfolge als eine andere Kodierung:
Hoffe, es hilft.