"á" ist ein Zwei-Byte-Zeichen (unter der Annahme einer UTF-8-Codierung).
So druckt die folgende Linie 2.
Aber std::cout
druckt immer noch korrekt Text.
Ich übergebe text
an boost::property_tree::ptree
und dann an write_json
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?
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
:
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.
Tags und Links c++ unicode boost boost-propertytree