当前位置 : 主页 > 编程语言 > c++ >

c – 使用WinApi时是否需要wchar_t支持unicode?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我知道通常你不需要wchar_t来支持通用代码的unicode,但是, Windows API似乎有一个ASCII或宽字符等效于所有采用字符串的方法.例如: FindWindowA(nullptr, "File Explorer"); // ASCII versionFindWindowW(nullpt
我知道通常你不需要wchar_t来支持通用代码的unicode,但是, Windows API似乎有一个ASCII或宽字符等效于所有采用字符串的方法.例如:

FindWindowA(nullptr, "File Explorer");  // ASCII version
FindWindowW(nullptr, L"File Explorer"); // Wide Character version

我在Visual Studio 2017中使用Properties>中的以下选项进行编译一般:

Character Set: Use Unicode Character Set

另一个可用选项是:使用多字节字符集.

我希望能够支持带有unicode字符的文件名,我不确定是否应该使用多字节字符集进行编译并使用所有宽字符方法,或者如果我应该使用unicode字符集进行编译并使用所有ASCII方法.

I am not sure if I should compile with the multi-byte character set
and use all the Wide Character methods, or if I should compile with
the unicode character set and use all the ASCII methods.

>如果要使用Unicode,则必须使用宽“W”版本
与wchar_t一起使用的函数.
>如果要使用多字节字符集(MBCS),则必须使用带有char的函数的“A”版本.
>函数的“A”版本通常不支持所有Unicode字符,并且基本上使用MultiByteToWideChar(CP_ACP)扩展其输入参数,调用它们的“W”对应物,最后使用WideCharToMultiByte将结果转换回多字节(CP_ACP) ).

因此,我建议您使用函数的“W”版本,假设您正在编写Windows NT及更高版本.

在Win32 API的上下文中,Microsoft的“Unicode”通常是指UTF-16.此外,Microsoft的MBCS本质上是DBCS,对于Windows 9x操作系统,缺少“W”版本的功能.

网友评论