Windows API ANSI函数和UTF-8

时间:2012-01-12 06:47:22

标签: winapi unicode encoding utf-8 ansi

是否可以将Windows API ANSI函数与UTF-8字符串一起使用?

例如,假设我有一个以UTF-8编码的路径。我可以拨打CreateDirectoryACreateFileA并使用UTF-8路径,还是在调用函数之前必须执行一些转换?

2 个答案:

答案 0 :(得分:15)

没有。使用MultiByteToWideChar将UTF-8转换为UTF-16,然后调用宽字符API,例如CreateDirectoryWCreateFileW

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