Sto scrivendo un parser JSON in C++ e sono di fronte a un problema durante l'analisi di stringhe JSON:Come gestire i valori unicode nelle stringhe JSON?
La specifica JSON afferma che le stringhe JSON possono contenere caratteri unicode sotto forma di:
"here comes a unicode character: \u05d9 !"
mio JSON parser tenta di mappare le stringhe JSON su std::string
quindi, in genere, un carattere delle stringhe JSON diventa un carattere di std::string
. Tuttavia, per quei caratteri Unicode, io davvero non so cosa fare:
devo solo mettere i valori byte prime nel mio std::string
in questo modo:
std::string mystr;
mystr.push_back('\0x05');
mystr.push_back('\0xd9');
O devo interpretare i due personaggi con un libreria come iconv
e memorizzare il risultato codificato UTF-8 nella mia stringa, invece?
Devo usare uno std::wstring
per memorizzare tutti i caratteri? Cosa succede allora su * NIX OS in cui wchar_t
ha una lunghezza di 4 byte?
Sento che qualcosa non va nelle mie soluzioni ma non riesco a capire cosa. Cosa dovrei fare in quella situazione?
Se wchar_t è lungo 4 byte, è possibile solo estendere zero ... Inoltre, UTF-8 non significa caratteri a 8 bit. Non ASCII verrà memorizzato utilizzando più byte nella codifica UTF-8. –
@ H2CO3: certo, anzi. http://json.org afferma che una * stringa * può contenere ** qualsiasi carattere UNICODE ** ma non dice se tali stringhe sono codificate UTF-8 o UTF-16. Mi sembra che sia la codifica UTF-8 con una rappresentazione speciale per i caratteri UTF-16. Un obiettivo della mia domanda è anche assicurarmi di ciò. – ereOn
non esiste "caratteri UTF-16". Esistono caratteri Unicode che non fanno parte di ASCII e sono codificati utilizzando più byte in UTF-8, UTF-16 e UTF-32. Le stringhe composte di caratteri multipli di byte multipli in UTF-16 e UTF-32 sono utili per fare in modo che tutti i caratteri abbiano la stessa lunghezza. –