112 Stimmen

JSON-Zeichenkodierung - wird UTF-8 von Browsern gut unterstützt oder sollte ich numerische Escape-Sequenzen verwenden?

Ich schreibe einen Webservice, der json verwendet, um seine Ressourcen zu repräsentieren, und ich bin ein bisschen stecken Denken über den besten Weg, um die json kodieren. Das Lesen der json rfc ( http://www.ietf.org/rfc/rfc4627.txt ) ist es klar, dass die bevorzugte Kodierung utf-8 ist. Aber die rfc beschreibt auch einen String-Escaping-Mechanismus für die Angabe von Zeichen. Ich gehe davon aus, dass dieser im Allgemeinen verwendet wird, um Nicht-Ascii-Zeichen zu entschlüsseln, wodurch das resultierende utf-8 gültige ascii wird.

Nehmen wir an, ich habe eine json-Zeichenkette, die Unicode-Zeichen (Code-Punkte) enthält, die nicht ascii-Zeichen sind. Sollte mein Webservice nur utf-8 kodiert, dass und geben Sie es, oder sollte es alle diese Nicht-Ascii-Zeichen zu entkommen und reine ascii zurück?

Ich möchte, dass die Browser in der Lage sind, die Ergebnisse mit jsonp oder eval auszuführen. Hat das Auswirkungen auf die Entscheidung? Mein Wissen über die Javascript-Unterstützung verschiedener Browser für utf-8 ist mangelhaft.

EDIT: Ich wollte klarstellen, dass mein Hauptanliegen, wie die Ergebnisse zu kodieren ist wirklich über Browser Handhabung der Ergebnisse. Was ich gelesen habe, deutet darauf hin, dass Browser empfindlich auf die Kodierung sein können, wenn JSONP insbesondere verwendet wird. Ich habe keine wirklich guten Informationen zu diesem Thema gefunden, also werde ich anfangen müssen, einige Tests durchzuführen, um zu sehen, was passiert. Idealerweise möchte ich nur die wenigen Zeichen, die erforderlich sind, zu entkommen und nur utf-8 kodieren die Ergebnisse.

-1voto

Paul Smith Punkte 153

Ich hatte ein ähnliches Problem mit é char... Ich denke, die Bemerkung "Es ist möglich, dass der Text, den Sie eingeben, nicht UTF-8 ist", trifft hier wahrscheinlich ins Schwarze. Ich habe das Gefühl, dass die Standard-Sortierreihenfolge in meiner Instanz etwas anderes war, bis ich es merkte und auf utf8 änderte... Das Problem ist, dass die Daten bereits vorhanden waren, also bin ich nicht sicher, ob die Daten konvertiert wurden oder nicht, als ich sie änderte. Das Endergebnis ist, dass php die Daten nicht json-codiert, sondern einfach false zurückgibt. Es spielt keine Rolle, welchen Browser Sie verwenden, da der Server mein Problem verursacht, wird php die Daten nicht in utf8 parsen, wenn dieses Zeichen vorhanden ist. Wie ich schon sagte, bin ich mir nicht sicher, ob es an der Konvertierung des Schemas in utf8 liegt, nachdem die Daten vorhanden waren, oder ob es sich um einen php-Bug handelt. In diesem Fall verwenden Sie json_encode(utf8_encode($string));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X