Domanda

Questo accade su OS X, anche se ho il sospetto che si applica a qualsiasi sistema operativo UNIX-y. Ho due stringhe che assomigliano a questo:

const wchar_t *test1 = (const wchar_t *)"\x44\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";
const wchar_t *test2 = (const wchar_t *)"\x44\x00\x00\x00\x19\x20\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";

Nel debugger, sembra test1 come "Ds" e test2 assomiglia a "D's" (con l'apostrofo riccio). Ho poi chiamo questo codice:

wchar_t buf1[100], buf2[100];
int ret1 = swprintf(buf1, 100, L"%ls", test1);
int ret2 = swprintf(buf2, 100, L"%ls", test2);

La prima chiamata swprintf funziona bene. I rendimenti secondo uno -1 (e il buffer è invariato).

sto cercando di indovinare il problema ha a che fare con i locali, ma googling in giro non ha fornito me con qualcosa di utile. Questo è il modo più semplice per riprodurre il problema che sto vedendo. Quello che sto veramente interessa è vswprintf (), ma suppongo che è strettamente correlati.

Perché soffocare swprintf sul carattere Unicode che è al di fuori del campo di 8-bit? Esiste un modo per aggirare questo?

È stato utile?

Soluzione

Provare impostare in modo esplicito il locale a UTF-8.

setlocale(LC_CTYPE, "UTF-8");
...
const wchar_t* test2 = L"D\x2019s";
int ret2 = swprintf(buf2, 100, L"%ls", test2);
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top