Boost json und UTF8



  • Nachfogend ein JSON File <file.json>, welches UTF8 Zeichen enthält:

    {
      "description": "\u00FCber den Wolken muss...",
    }
    

    Wie kann ich nachfolgenden Code ändern, dass der JSON Parser von BOOST auch UTF8 liest?

    #include "boost/property_tree/json_parser.hpp"
    
    void F()
    {
        boost::property_tree::ptree pt;
        boost::property_tree::json_parser::read_json(file.json, pt);
        boost::optional<std::string> optional = pt.get_optional<std::string>("description");
        if (optional)
        {
            std::string info = *optional;
            // more code...
        }
    }
    

    Danke für eure Hilfe!
    Gruß,
    T.



  • Was erwartest Du, dass in info steht und was steht tatsächlich drin?



  • Der Umlaut (hier "ü") sollte auch so im std::string stehen.



  • ü (U+00FC) wird ja in UTF-8 als Sequenz aus zwei Bytes, nämlich 0xc3 und 0xbc , codiert. Falls also 0xc3 , 0xbc in deinem std::string stehen, ist es korrekt eingelesen.

    Jetzt stellt sich die Frage der Darstellung:
    Der Visual Studio Debugger z.B. zeigt dir nicht ü, sondern kryptische Zeichen an, eben die Enstprechung von 0xc3 und 0xbc an (als je einen Charakter).

    Könnte sein, dass alles richtig ist, Du jedoch mit einem anderen Ergebnis gerechnet hast...

    Hier noch eine UTF-8 Tabelle: http://www.utf8-chartable.de/


Anmelden zum Antworten