Salve ho questo problema con la conversione da char* in wchar_t.
Su linux io scrivo in questo modo e funziona:
Su linux la variabile "val" mi restituisce 167 e va bene mentre su windows trovo tre caratteri in WcharString e 167 si trova nel secondo carattere.codice:locale newlocale1(""); locale newlocale2(locale::classic(), newlocale1, locale::ctype); locale::global(newlocale2); wchar_t val; char tmpval[] = "§"; wchar_t WcharString[255]; mbstowcs(WcharString, tmpval, strlen(tmpval)); val = WcharString[0]; cout << val;
Dentro WcharString dovrei trovare solo un singolo carattere 167 che corrisponde a § ma questo non accade.
Su linux se non setto il locale a utf8 la funzione mbstowcs non fa il suo dovere e in questo momento ho notato che
non fa assolutamente nulla su windows,mentre se lo scrivo in Ccodice:locale newlocale1(""); locale newlocale2(locale::classic(), newlocale1, locale::ctype); locale::global(newlocale2);
il locale è Italian_Italy.1252 che non è utf8.codice:char * local = setlocale (LC_ALL, ""); cout << local; //Italian_Italy.1252
A me interessa avere il risultato che ho su linux e cioè 167.
Qualche idea?

Rispondi quotando