boost :: property_tree :: json_parser und zwei Byte breite Zeichen

8

Einführung

%Vor%

"á" ist ein Zwei-Byte-Zeichen (unter der Annahme einer UTF-8-Codierung).
So druckt die folgende Linie 2.

%Vor%

Aber std::cout druckt immer noch korrekt Text.

%Vor%

Mein Problem

Ich übergebe text an boost::property_tree::ptree und dann an write_json

%Vor%

Das Ergebnis ist

%Vor%

text ist gleich "á" was anders ist als "á".

Ist es möglich, dieses Problem zu beheben, ohne zu std::wstring zu wechseln? Ist es möglich, dass das Ändern der Bibliothek ( boost::property_tree::ptree ) dieses Problem lösen kann?

    
Jarosław Gomułka 21.04.2012, 16:07
quelle

2 Antworten

10

Ich habe einige Lösungen gefunden. Im Allgemeinen müssen Sie boost::property_tree::json_parser::create_escapes template für [Ch=Char] angeben, um Ihren "besonderen Anlass fehlerfrei zu entkommen".

Der JSON-Standard geht davon aus, dass alle Zeichenfolgen UTF-16-codiert sind, wobei "\ uXXXX" escape gibt. Einige Bibliotheken unterstützen jedoch die UTF-8-Codierung mit "\ xXX" -Entweichen. Wenn die JSON-Datei in UTF-8 codiert werden kann, können Sie alle Zeichen höher als 0x7F übergeben, was für die ursprüngliche Funktion gedacht war.

Ich habe diesen Code vor der Verwendung von boost::property_tree::json_parser::write_json eingefügt. Es kommt von boost_1_49_0/boost/property_tree/detail/json_parser_write.hpp :

%Vor%

Und die Ausgabe, die ich bekomme:

%Vor%

Auch die Funktion boost::property_tree::json_parser::a_unicode hat ähnliche Probleme beim Lesen von Unicode-Zeichen in Zeichensätze.

    
Arpegius 23.04.2012, 18:38
quelle
-1

Unterstützung über Basic Multilingual Plane:

%Vor%     
junglecat 31.01.2013 21:49
quelle