Ich bin ein JSON-Parser in C++ zu schreiben und ein Problem ist vor, wenn JSON-Strings Parsen:Wie behandelt man Unicode-Werte in JSON-Strings?
Die JSON-Spezifikation besagt, dass JSON-Strings Unicode-Zeichen in Form enthalten:
"here comes a unicode character: \u05d9 !"
Meine JSON Parser versucht, JSON-Zeichenfolgen std::string
zuzuordnen, so dass normalerweise ein Zeichen der JSON-Zeichenfolgen ein Zeichen der std::string
wird. Doch für das Unicode-Zeichen, ich weiß wirklich nicht, was zu tun ist:
Soll ich nur das rohe Bytes Wert setzt in meinem std::string
wie so:
std::string mystr;
mystr.push_back('\0x05');
mystr.push_back('\0xd9');
Oder soll ich interpretiere die beiden Charaktere mit einem Bibliothek wie iconv
und speichern Sie das UTF-8-codierte Ergebnis in meiner Zeichenfolge statt?
Sollte ich eine std::wstring
verwenden, um alle Zeichen zu speichern? Was dann auf * NIX OSes wo wchar_t
sind 4 Bytes lang?
Ich fühle, dass etwas in meinen Lösungen falsch ist, aber ich verstehe nicht was. Was soll ich in dieser Situation tun?
Wenn wchar_t 4 Bytes lang ist, können Sie einfach Nullen erweitern ... UTF-8 bedeutet auch nicht 8-Bit-Zeichen. Nicht-ASCII wird mit mehreren Bytes in der UTF-8-Codierung gespeichert. –
@ H2CO3: Sicher, in der Tat. http://json.org gibt an, dass eine * Zeichenkette * ** ein beliebiges UNICODE-Zeichen ** enthalten kann, aber es wird nicht angegeben, ob diese Zeichenketten UTF-8 oder UTF-16-kodiert sind. Es scheint mir, dass es UTF-8-Codierung mit einer speziellen Darstellung für UTF-16-Zeichen ist. Ein Ziel meiner Frage ist auch, das sicherzustellen. – ereOn
gibt es keine "UTF-16-Zeichen". Es gibt Unicode-Zeichen, die nicht Teil von ASCII sind, und sie werden auch mit mehreren Bytes in UTF-8, UTF-16 und UTF-32 codiert. Die aus mehreren Bytes bestehenden Zeichenfolgen in UTF-16 und UTF-32 bestehen nur aus Bequemlichkeit, damit alle Zeichen die gleiche Länge haben. –