Is it possible to use Windows API ANSI functions with UTF-8 strings?
For example, say I have a path encoded in UTF-8. Can I call CreateDirectoryA
or CreateFileA
and use a UTF-8 path, or do I have to perform some conversion before calling the functions?
An easier approach (than using raw Win32 API MultiByteToWideChar) would be to use ATL conversion helpers, like CA2CW. You can specify CP_UTF8 as code page (second parameter in the constructor), to convert from Unicode UTF-8 to Unicode UTF-16:
Note that in Unicode builds (which should be the default ones these days), CreateDirectory just expands to CreateDirectoryW, so I would just drop the ending "W" and use the (IMHO, more readable) CreateDirectory:
No. Use
MultiByteToWideChar
to convert UTF-8 to UTF-16 and then call the wide character APIs such asCreateDirectoryW
orCreateFileW
.