Функции 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
);