Ответ 1
Нет. Используйте MultiByteToWideChar
для преобразования UTF-8 в UTF-16, а затем вызовите широкоформатные API-интерфейсы, такие как CreateDirectoryW
или CreateFileW
.
Можно ли использовать функции ANSI Windows API со строками UTF-8?
Например, скажем, у меня есть путь, закодированный в UTF-8. Могу ли я вызвать CreateDirectoryA
или CreateFileA
и использовать путь UTF-8, или мне нужно выполнить некоторое преобразование перед вызовом функций?
Нет. Используйте MultiByteToWideChar
для преобразования UTF-8 в UTF-16, а затем вызовите широкоформатные API-интерфейсы, такие как CreateDirectoryW
или CreateFileW
.
Более простой подход (чем использование необработанного Win32 API MultiByteToWideChar) заключается в использовании помощников преобразования ATL, например CA2CW, Вы можете указать CP_UTF8 как кодовую страницу (второй параметр в конструкторе), чтобы преобразовать из Unicode UTF-8 в Unicode UTF-16:
CreateDirectoryW(
CA2W( utf8Name, CP_UTF8 ) // convert from UTF-8 to UTF-16
... // other stuff
);
Обратите внимание, что в Unicode-сборках (которые в наши дни должны быть стандартными) CreateDirectory просто расширяется до CreateDirectoryW, поэтому я просто удаляю окончание "W" и использую (IMHO, более читаемый) CreateDirectory:
CreateDirectory(
CA2W( utf8Name, CP_UTF8 ) // convert from UTF-8 to UTF-16
... // other stuff
);