是否可以将Windows API ANSI函数与UTF-8字符串一起使用?
例如,假设我有一个以UTF-8编码的路径。我可以拨打CreateDirectoryA
或CreateFileA
并使用UTF-8路径,还是在调用函数之前必须执行一些转换?
答案 0 :(得分:15)
没有。使用MultiByteToWideChar
将UTF-8转换为UTF-16,然后调用宽字符API,例如CreateDirectoryW
或CreateFileW
。
答案 1 :(得分:3)
比使用原始Win32 API MultiByteToWideChar更简单的方法是使用ATL conversion helpers,例如 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
);