在WinApi使用wchar_t处理Unicode字符时,是否必须全面支持宽字符类型?

2026-04-16 19:443阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计377个文字,预计阅读时间需要2分钟。

在WinApi使用wchar_t处理Unicode字符时,是否必须全面支持宽字符类型?

我知道通常不需要使用wchar_t来支持通用代码的Unicode,但Windows API似乎有一种方法,即使对于所有使用的字符串,也能使用ASCII或宽字符。例如:FindWindowA(nullpt); // ASCII version FindWindowW(nullpt); // Wide character version

我知道通常你不需要wchar_t来支持通用代码的unicode,但是, Windows API似乎有一个ASCII或宽字符等效于所有采用字符串的方法.例如:

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

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

在WinApi使用wchar_t处理Unicode字符时,是否必须全面支持宽字符类型?

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”版本的功能.

本文共计377个文字,预计阅读时间需要2分钟。

在WinApi使用wchar_t处理Unicode字符时,是否必须全面支持宽字符类型?

我知道通常不需要使用wchar_t来支持通用代码的Unicode,但Windows API似乎有一种方法,即使对于所有使用的字符串,也能使用ASCII或宽字符。例如:FindWindowA(nullpt); // ASCII version FindWindowW(nullpt); // Wide character version

我知道通常你不需要wchar_t来支持通用代码的unicode,但是, Windows API似乎有一个ASCII或宽字符等效于所有采用字符串的方法.例如:

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

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

在WinApi使用wchar_t处理Unicode字符时,是否必须全面支持宽字符类型?

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”版本的功能.