Un approccio più semplice (che utilizzare grezzo Win32 API MultiByteToWideChar) sarebbe utilizzare ATL conversion helpers, come CA2CW. È possibile specificare CP_UTF8 come pagina di codice (secondo parametro nel costruttore), convertire da Unicode UTF-8 a Unicode UTF-16:
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Si noti che in Unicode costruisce (che dovrebbe essere quelli di default questi giorni), CreateDirectory espande solo per CreateDirectoryW, quindi vorrei solo cadere il finale "W" e utilizzare il (secondo me, più leggibile) CreateDirectory:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
fonte
2012-01-14 18:18:42
Yikes. Perché qualcuno dovrebbe volerlo? Penso che ora siamo passati a Windows ME (che era l'ultima versione di Windows che avesse mai bisogno delle API ANSI). Dovrebbero estinguersi già, soprattutto per le applicazioni di nuova concezione. – Joey
Da dove ottieni le stringhe UTF-8? È molto più semplice convertire la tua applicazione in modo che funzioni interamente con le stringhe UTF-16, come richiedono le cosiddette funzioni API di Windows di versioni ampie. E come dice Joey, * sempre * chiama le versioni wide (con il suffisso 'W'), non le versioni ANSI. Quelli sono stati obsoleti per decenni. –
@Joey: Perché un sacco di librerie C (++) (inclusa la libreria standard!) Preferiscono lavorare con le stringhe basate su 'char' piuttosto che sulle stringhe basate su' wchar_t'. Se Windows supporta pienamente UTF-8, puoi utilizzare UTF-8 in tutto il programma invece di dover eseguire la conversione tra UTF-8 e UTF-16 in ogni momento. – dan04