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
);