Witam szukam parsera JSON który odkoduje polskie znaki zapisane w unicode (/u0142.. itp) . Znalazłem parę parserów w internecie z obsługa unicode ale ale nie zamieniają one właśnie polskich znaków. Moglibyście coś polecić?
Jeśli to
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
nie działa to masz coś nie tak gdzie indziej.
Ale potrzebuje ten parser w c++ . Dopiero zaczynam swoją przygode z JSON i nie garniam go za bardzo.
Chyba ze coś źle odkodowuje tego stringa z JSON'em
ifstream czytaj("curl.txt");
string s;
while(getline(czytaj,q))
text=text + s;
books = json::parse_string(cos);
string k=books[0]["produkt"].as<string>();
cout<<"\n\t"<<"ł\t"<<k<<endl<<endl;;
i na wyjściu wychodzi takie coś:
http://scr.hu/2aps/60gn2
Stawiałbym raczej na to, że masz ustawioną złą stronę kodową w konsoli :P
jak zmienię lokalizacje na polską to w tedy wychodzi takie coś :P
Jak widać " ł " po lewej stronie wyświetla się normalnie za to to " ł " odkodowane wygląda całkiem inaczej.
QtJson wydaje się sobie radzić:
QByteArray s = R"({ "foo": "zażółć gęślą ja\u017A\u0144" })";
QJsonDocument j = QJsonDocument::fromJson(s);
auto str = j.object().value("foo").toString();
cout << "str size: " << str.size() << endl;
for(QChar c : str){
cout << "0x" << setw(4) << hex << uppercase << setfill('0') << c.unicode();
if(c.toLatin1()){
cout << setfill(' ') << " -> " << c.toLatin1() << endl;
}else{
cout << endl;
}
}
Powinno dać taki wynik
str size: 17
0x7A00 -> z
0x6100 -> a
0x17C0
0xF300 -> ˇ
0x1420
0x1070
0x2000 ->
0x6700 -> g
0x1190
0x15B0
0x6C00 -> l
0x1050
0x2000 ->
0x6A00 -> j
0x6100 -> a
0x17A0
0x1440
Czy jeśli użyję QT do małego programu to nie będzie przesada? :P Nigdy jej nie używałem także wolę się najpierw zapytać :)
Jak jesteś na linuksie to na pewno nie. Jak na windowsie, to będzie lekki overkill, bo każda program będzie wymagał ~25mb bibliotek do wystartowania, ale nie przejmowałbym się tym aż tak.
Próbwałeś facebookowego folly? Stworzyli coś takiego jak dynamic https://github.com/facebook/folly/blob/master/folly/docs/Dynamic.md - główną motywacją do tego było właśnie parsowanie JSONa w C++. To krótkie overview powinno wszystko wyjaśnić.
Nie sprawdzałam samodzielnie czy radzi sobie z polskimi znakami, ale jestem tego prawie pewna.
No i folly generalnie ma wiele przydatnych funkcji (folly::to, make_unique, StringPiece itd.) które świetnie działają z C++11 i ogólnie bardzo usprawniają pisanie kodu w C++ ;)