在将ASCII字符串传递给Windows API函数之前将其转换为UTF-16

Jos*_*osh 2 c++ windows unicode winapi encoding

在我目前的项目中,我一直在使用宽字符(utf16).但是由于我用户的唯一输入将是一个url,无论如何都必须结束ascii,另外还有一个字符串,我正在考虑将整个程序切换为ascii.

我的问题是,在将字符串传递给Windows API函数之前,将字符串转换为utf16有什么好处吗?

在网上做了一些研究之后,如果你不在Windows上使用UTF-16,似乎有很多人推荐这个.

dan*_*n04 5

在Windows API中,如果调用类似的函数

int SomeFunctionA(const char*);
Run Code Online (Sandbox Code Playgroud)

然后它会自动将字符串转换为UTF-16并调用该函数的真实 Unicode版本:

int SomeFunctionW(const wchar_t*);
Run Code Online (Sandbox Code Playgroud)

问题是,它将字符串从ANSI代码页转换为UTF-16 .如果你实际上在ANSI代码页中编码了字符串,那就行了.如果您使用UTF-8编码的字符串不起作用,这些日子现在越来越常见(例如,近70%的网页),并且不支持ANSI代码页.

此外,如果您使用AAPI,您将遇到限制,例如不能(轻松)打开名称中包含非ANSI字符的文件(可以是任意UTF-16字符串).并且无法访问某些Windows的新功能.

这就是我总是称之为W功能的原因.即使这意味着令人讨厌的显式转换(来自我们软件的非Windows特定部分中使用的UTF-8字符串).