[英]Windows API ANSI functions and UTF-8
是否可以使用帶有UTF-8字符串的Windows API ANSI函數?
例如,假設我有一個以UTF-8編碼的路徑。 我可以調用CreateDirectoryA
或CreateFileA
並使用UTF-8路徑,還是在調用函數之前必須執行一些轉換?
MultiByteToWideChar
。使用MultiByteToWideChar
將UTF-8轉換為UTF-16,然后調用寬字符API,如CreateDirectoryW
或CreateFileW
。
一種比使用原始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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.