sviluppatori di software popolari e le aziende (Joel Spolsky, Fog Creek software) tendono ad usare wchar_t per caratteri Unicode stoccaggio durante la scrittura di codice C o C++. Quando e come si dovrebbe usare char e wchar_t rispetto alle buone pratiche di codifica?Corretto utilizzo dello storage stringa in C e C++
Sono particolarmente interessato a conformità POSIX durante la scrittura di software che sfrutta Unicode.
Quando si utilizza wchar_t, è possibile cercare caratteri in un array di caratteri di larghezza su una base per carattere o per-array-elemento:
/* C code fragment */
const wchar_t *overlord = L"ov€rlord";
if (overlord[2] == L'€')
wprintf(L"Character comparison on a per-character basis.\n");
Come si può confrontare byte Unicode (o caratteri) quando si utilizza char?
Finora il mio modo preferito di confronto tra stringhe e caratteri di tipo char in C spesso assomiglia a questo:
/* C code fragment */
const char *mail[] = { "ov€[email protected]", "ov€[email protected]" };
if (mail[0][2] == mail[1][2] && mail[0][3] == mail[1][3] && mail[0][3] == mail[1][3])
printf("%s\n%zu", *mail, strlen(*mail));
scansioni questo metodo per l'equivalente di byte di un carattere Unicode. Il simbolo dell'euro Unicode € occupa 3 byte. Pertanto è necessario confrontare tre byte dell'array di caratteri per sapere se i caratteri Unicode corrispondono. Spesso è necessario conoscere la dimensione del carattere o della stringa che si desidera confrontare e i bit che produce affinché la soluzione funzioni. Questo non sembra un buon modo di gestire Unicode. Esiste un modo migliore per confrontare stringhe e elementi di carattere di tipo char?
Inoltre, quando si utilizza wchar_t, come si può eseguire la scansione del contenuto del file con un array? La funzione fread non sembra produrre risultati validi.
Unicode in C++: non utilizzare 'wchar_t', utilizzare una libreria Unicode corretta. –
'tendono ad usare wchar_t per la codifica dei caratteri Unicode'. No; lo usano per il carattere Unicode _storage_, e c'è una grande differenza. –
possibile duplicato di [std :: wstring VS std :: string] (http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) –