Ich schreibe einen Webservice, der json verwendet, um seine Ressourcen darzustellen, und ich bin ein bisschen festgefahren, wie ich den json am besten codieren kann. Beim Lesen des json rfc ( http://www.ietf.org/rfc/rfc4627.txt ) ist klar, dass die bevorzugte Codierung utf-8 ist. Der RFC beschreibt aber auch einen Mechanismus zum Entkommen von Zeichenfolgen zum Angeben von Zeichen. Ich gehe davon aus, dass dies im Allgemeinen verwendet wird, um Nicht-ASCII-Zeichen zu entkommen, wodurch das resultierende utf-8-ASCII gültig wird.
Nehmen wir also an, ich habe eine JSON-Zeichenfolge, die Unicode-Zeichen (Codepunkte) enthält, die keine ASCII-Zeichen sind. Sollte mein Webservice nur utf-8 codieren und zurückgeben, oder sollte er all diesen Nicht-ASCII-Zeichen entkommen und reines ASCII zurückgeben?
Ich möchte, dass Browser die Ergebnisse mit jsonp oder eval ausführen können. Beeinflusst das die Entscheidung? Mein Wissen über die Javascript-Unterstützung verschiedener Browser für utf-8 fehlt.
EDIT: Ich wollte klarstellen, dass mein Hauptanliegen beim Codieren der Ergebnisse wirklich die Browser-Handhabung der Ergebnisse ist. Was ich gelesen habe, weist darauf hin, dass Browser möglicherweise besonders bei Verwendung von JSONP empfindlich auf die Codierung reagieren. Ich habe keine wirklich guten Informationen zu diesem Thema gefunden, daher muss ich einige Tests durchführen, um zu sehen, was passiert. Im Idealfall möchte ich nur den wenigen erforderlichen Zeichen entkommen und nur utf-8 die Ergebnisse codieren.
quelle
Ich hatte dort ein Problem. Wenn ich JSON eine Zeichenfolge mit einem Zeichen wie "é" codiere, gibt jeder Browser das gleiche "é" zurück, mit Ausnahme des IE, der "\ u00e9" zurückgibt.
Dann schlägt es mit PHP json_decode () fehl, wenn "é" gefunden wird. Für Firefox, Opera, Safari und Chrome muss ich utf8_encode () vor json_decode () aufrufen.
Hinweis: Bei meinen Tests verwenden IE und Firefox ihr natives JSON-Objekt, andere Browser verwenden json2.js.
quelle
utf8_encode()
, php.net/manual/en/function.utf8-encode.phpASCII ist nicht mehr drin. Die Verwendung der UTF-8-Codierung bedeutet, dass Sie keine ASCII-Codierung verwenden. Wofür Sie den Escape-Mechanismus verwenden sollten, ist das, was der RFC sagt:
quelle
Ich hatte das gleiche Problem. Für mich geht das. Bitte prüfen Sie das.
quelle
Zu Ihrer Information, RFC 4627 ist nicht mehr die offizielle JSON-Spezifikation. Es wurde 2014 von RFC 7159 überholt , das 2017 von RFC 8259 , der aktuellen Spezifikation, überholt wurde .
RFC 8259 besagt:
quelle
Ich hatte ein ähnliches Problem mit é char ... Ich denke, der Kommentar "Es ist möglich, dass der Text, den Sie eingeben, nicht UTF-8 ist" hier wahrscheinlich nahe an der Marke liegt. Ich habe das Gefühl, dass die Standardkollatierung in meiner Instanz etwas anderes war, bis ich erkannte und auf utf8 änderte. Das Problem ist, dass die Daten bereits vorhanden waren. Ich bin mir also nicht sicher, ob sie die Daten konvertiert haben oder nicht, wenn ich sie geändert habe. Wird in MySQL gut angezeigt Werkbank. Das Endergebnis ist, dass PHP die Daten nicht json codiert, sondern nur false zurückgibt. Egal welchen Browser Sie als Server verwenden, der mein Problem verursacht, PHP analysiert die Daten nicht nach utf8, wenn dieses Zeichen vorhanden ist. Wie ich schon sagte, nicht sicher, ob es an der Konvertierung des Schemas in utf8 liegt, nachdem Daten vorhanden waren oder nur an einem PHP-Fehler. In diesem Fall verwenden
json_encode(utf8_encode($string));
quelle