single - newtonsoft json to string




JSON und escape-Zeichen (2)

Dies ist kein Bug in beiden Implementierungen. Es besteht keine Notwendigkeit, U + 00B0 zu verlassen. Um den RFC zu zitieren:

2.5. Saiten

Die Darstellung von Zeichenfolgen ähnelt den Konventionen, die in der C-Programmiersprachenfamilie verwendet werden. Eine Zeichenfolge beginnt und endet mit Anführungszeichen. Alle Unicode-Zeichen können in die Anführungszeichen gesetzt werden, mit Ausnahme der Zeichen, die mit Escapezeichen versehen werden müssen: Anführungszeichen, umgekehrter Solidus und die Steuerzeichen (U + 0000 bis U + 001F).

Jedem Zeichen kann ein Escape-Zeichen hinzugefügt werden.

Wenn alles zurückgeholt wird, wird die Größe der Daten aufgebläht (alle Codepunkte können in allen Unicode-Transformationsformaten in vier oder weniger Bytes dargestellt werden, während sie bei der Codierung für alle sechs oder zwölf Byte umfassen).

Es ist wahrscheinlicher, dass Sie irgendwo im Code einen Textumwandlungsfehler haben und das Ausbrechen von allem in der ASCII-Teilmenge das Problem maskiert. Es ist eine Voraussetzung der JSON-Spezifikation, dass alle Daten eine Unicode-Codierung verwenden.

Ich habe eine Zeichenkette, die zu JSON in Javascript serialisiert wird und dann zu Java deserialisiert wird.

Es sieht so aus, als ob die Zeichenfolge ein Gradsymbol enthält, dann bekomme ich ein Problem.

Ich könnte Hilfe gebrauchen, um herauszufinden, wem ich die Schuld geben könnte:

  • ist es die Spidermonkey 1.8 Implementierung? (Dies hat eine eingebaute JSON-Implementierung)
  • ist es Google Gson ?
  • bin ich es, etwas nicht richtig zu machen?

Folgendes geschieht in JSDB:

js>s='15\u00f8C'
15°C
js>JSON.stringify(s)
"15°C"

Ich hätte "15\u00f8C' erwartet "15\u00f8C' was mich zu der Annahme verleitet, dass die JSON-Implementierung von Spidermonkey nicht das Richtige tut ... außer dass die Syntaxbeschreibung der JSON-Homepage (ist das die Spezifikation?) Besagt, dass ein Zeichen sein kann

any-Unicode-Zeichen - außer - "- oder - \ - oder- Steuerzeichen"

vielleicht übergibt sie die Zeichenfolge also unverändert, ohne sie als \ u00f8 zu kodieren ... in diesem Fall würde ich denken, dass das Problem bei der Gson-Bibliothek liegt.

Kann jemand helfen?

Ich nehme an, dass meine Problemumgehung darin besteht, entweder eine andere JSON-Bibliothek zu verwenden oder Strings nach dem Aufruf von JSON.stringify() manuell zu JSON.stringify() - aber wenn das ein Fehler ist, möchte ich einen Fehlerbericht einreichen.


hmm, nun, hier ist ein Workaround sowieso:

function JSON_stringify(s, emit_unicode)
{
   var json = JSON.stringify(s);
   return emit_unicode ? json : json.replace(/[\u007f-\uffff]/g,
      function(c) { 
        return '\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);
      }
   );
}

Testfall:

js>s='15\u00f8C 3\u0111';
15°C 3◄
js>JSON_stringify(s, true)
"15°C 3◄"
js>JSON_stringify(s, false)
"15\u00f8C 3\u0111"






unicode