Функции ANSI API Windows и UTF-8
можно ли использовать функции ANSI API Windows с строками UTF-8?
например, скажем, у меня есть путь, закодированный в UTF-8. Могу я позвонить CreateDirectoryA
или CreateFileA
и используйте путь UTF-8, или мне нужно выполнить некоторое преобразование перед вызовом функций?
2 ответов
нет. Использовать MultiByteToWideChar
чтобы преобразовать UTF-8 в UTF-16, а затем вызвать API широкого символа, такие как CreateDirectoryW
или CreateFileW
.
более простым подходом (чем использование raw 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" и использовал (ИМХО, более читаемый) CreateDirectory:
CreateDirectory(
CA2W( utf8Name, CP_UTF8 ) // convert from UTF-8 to UTF-16
... // other stuff
);