winapi unicode encoding utf-8 ansi

winapi - Funciones API ANSI de Windows y UTF-8



unicode encoding (2)

¿Es posible utilizar las funciones ANSI de la API de Windows con cadenas UTF-8?

Por ejemplo, digamos que tengo una ruta codificada en UTF-8. ¿Puedo llamar a CreateDirectoryA o CreateDirectoryA y usar una ruta UTF-8, o tengo que realizar alguna conversión antes de llamar a las funciones?


No. Use MultiByteToWideChar para convertir de UTF-8 a UTF-16 y luego llame a las API de caracteres anchos como CreateDirectoryW o CreateDirectoryW .


Un enfoque más fácil (que usar el WinBB API MultiByteToWideChar) sería usar ayudantes de conversión ATL , como CA2CW . Puede especificar CP_UTF8 como página de códigos (segundo parámetro en el constructor), para convertir de Unicode UTF-8 a Unicode UTF-16:

CreateDirectoryW( CA2W( utf8Name, CP_UTF8 ) // convert from UTF-8 to UTF-16 ... // other stuff );

Tenga en cuenta que en las compilaciones de Unicode (que deberían ser las predeterminadas en estos días), CreateDirectory simplemente se expande a CreateDirectoryW, así que simplemente eliminaría la "W" final y usaría el CreateDirectory (IMHO, más legible):

CreateDirectory( CA2W( utf8Name, CP_UTF8 ) // convert from UTF-8 to UTF-16 ... // other stuff );