2 Stimmen

JSON, das als UTF-8 gespeichert wird, erfordert zwei Kodierungskonvertierungen

Eine JSON-Zeichenkette kann die Escape-Sequenz enthalten: \u Vier-Hex-Ziffern, die zwei Oktette sind.

Nach dem Einlesen der vier Hex-Ziffern in c1, c2, c3, c4 gibt die JSON Spirit C++-Bibliothek ein einzelnes Zeichen zurück, das den Wert (hex_to_num (c1) << 12) + (hex_to_num (c2) << 8) + (hex_to_num (c3) << 4) + hex_to_num (c4) .

Aufgrund der Einfachheit des Dekodierungsschemas und der Tatsache, dass nur 2 Oktette zu dekodieren sind, schließe ich, dass JSON-Escape-Sequenzen nur die UCS-2-Kodierung unterstützen, d. h. Text von BMP U+0000 bis U+FFFF, der "wie er ist" kodiert wird, wobei der Codepunkt als 16-Bit-Codeeinheit verwendet wird.

Da UTF-16 und UCS-2 gültige Codepunkte in U+0000 bis U+FFFF als einzelne 16-Bit-Codeeinheiten kodieren, die numerisch gleich den entsprechenden Codepunkten sind ( wikipedia ), kann man einfach so tun, als ob das dekodierte UCS-2-Zeichen ein UTF-16-Zeichen wäre.

Das Escape-Zeichen unterscheidet sich von einer normalen JSON-Zeichenkette ohne Escape-Zeichen, die "" enthalten kann. any Unicode character except " or \ or control-character " (json spec) . Da JSON eine Teilmenge von ECMAScript ist, bei der davon ausgegangen wird, dass sie UTF-16 ist (Ecma-Standard) schließe ich, dass JSON die UTF-16-Kodierung unterstützt, die breiter als das, was die Escape-Sequenz bietet.

Wenn man nun alle JSON-Strings auf UTF-16 reduziert und sie von UTF-16 nach UTF-8 konvertiert, ist es nach meinem Verständnis möglich, das UTF-8 in einem std::string unter Linux zu speichern, da man bei der Verarbeitung oft ignorieren kann, dass mehrere std::string-Zeichen verbraucht werden, um eine 6 Byte lange UTF-8-Sequenz darzustellen.

Wenn alle oben genannten Annahmen und Interpretationen korrekt sind, kann man JSON sicher parsen und in einem std::string unter Linux speichern. Kann das bitte jemand überprüfen?

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