Łatwiejszym podejściem (niż używanie surowego API Win32 MultiByteToWideChar) byłoby użycie ATL conversion helpers, np. CA2CW. Można określić CP_UTF8 jako strona kodowa (drugi parametr w konstruktorze), przekonwertować z Unicode UTF-8 Unicode UTF-16:
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
pamiętać, że w Unicode buduje (które powinny być te domyślne te dzień), createDirectory tylko rozszerza się CreateDirectoryW, więc chciałbym tylko kropla końcówka "w" i użyj (IMHO bardziej czytelny) createDirectory:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Yikes. Dlaczego ktoś by chciał? Myślę, że jesteśmy już daleko za Windows ME (który był ostatnią wersją Windowsa, która kiedykolwiek potrzebowała interfejsów ANSI API). Powinni już wymrzeć, zwłaszcza w przypadku nowo opracowanych aplikacji. – Joey
Skąd czerpiesz sygnały UTF-8? O wiele łatwiej jest przekonwertować aplikację do pracy z ciągami UTF-16, ponieważ wymagają tego tak zwane funkcje API Windows o szerokich wersjach. I jak mówi Joey, * zawsze * wywołaj szerokie wersje (z sufiksem "W"), a nie wersje ANSI. Te są przestarzałe od dziesięcioleci. –
@Joey: Ponieważ strasznie dużo bibliotek C (++) (łącznie z biblioteką standardową!) Wolimy pracować z łańcuchami 'char' niż łańcuchami' wchar_t'. Jeśli system Windows w pełni obsługuje kodowanie UTF-8, możesz po prostu użyć UTF-8 w całym programie, zamiast ciągle konwertować UTF-8 i UTF-16. – dan04