加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:20:23 所属栏目:百科 来源:网络整理
导读:我知道通常你不需要wchar_t来支持通用代码的unicode,但是,Windows API似乎有一个ASCII或宽字符等效于所有采用字符串的方法.例如: FindWindowA(nullptr,"File Explorer"); // ASCII versionFindWindowW(nullptr,L"File Explorer"); // Wide Character versio
我知道通常你不需要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”版本的功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读