Unicode Win32 API函数的编码要求是什么?

Unicode Win32 API函数的编码要求是什么?,unicode,encoding,winapi,Unicode,Encoding,Winapi,例如,MessageBox函数具有文本和标题的LPCTSTR类型参数,当分别定义了_UNICODE或_MBCS时,这是指向char的指针或指向wchar的指针 MessageBox函数如何解释这些刺痛?作为哪种编码 我找到的唯一解释是: 但是它没有说任何关于编码的事情?只是在_MBCS的情况下,一个字符占用一个wchar(在Windows上为16位),而在_UNICODE的情况下,一个或两个字符占用一个wchar(8位) 那么,那些微软版本的UTF-8和UTF-16是否忽略了UTF-8中必须以

例如,MessageBox函数具有文本和标题的LPCTSTR类型参数,当分别定义了_UNICODE或_MBCS时,这是指向char的指针或指向wchar的指针

MessageBox函数如何解释这些刺痛?作为哪种编码

我找到的唯一解释是:

但是它没有说任何关于编码的事情?只是在_MBCS的情况下,一个字符占用一个wchar(在Windows上为16位),而在_UNICODE的情况下,一个或两个字符占用一个wchar(8位)


那么,那些微软版本的UTF-8和UTF-16是否忽略了UTF-8中必须以3或4字节编码的内容,以及UTF-16中必须以4字节编码的内容?有没有一种方法可以通过MessageBox显示Unicode基本多语言平面之外的任何内容?

每个函数通常有两种不同的实现:

  • MessageBoxA
    ,它接受ANSI字符串
  • MessageBoxW
    ,它接受Unicode字符串
此处,“ANSI”表示当前分配给进程的多字节代码页。这取决于用户的首选项和区域设置,尽管可以使用Win32 API函数(如
WideCharToMultiByte
)进行正确的转换,并且
GetACP
函数将告诉您正在使用的代码页


“Unicode”通常指UCS-2;也就是说,对0xFFFF以上字符的支持不一致。我还没有尝试过这个,但是最近版本(>Windows 2000)中的UI函数(如
MessageBox
)应该支持BMP以外的字符。

A函数已经过时,只包装
…W
函数。前者是与Windows 9x兼容所必需的,但由于它已不再使用,因此您应该不惜一切代价避免使用它们,并专门使用
…W
功能。它们需要UTF-16字符串,这是唯一的本机Windows编码。所有现代Windows版本都应该很好地支持非BMP字符(当然,如果有包含这些字符的字体)。

正确的宏是
UNICODE
,而不是
\u UNICODE
。后者影响C标准库标题,前者影响Windows标题。我不知道。我读了一些书,现在我明白了其中的区别。谢谢。Win2k和更高版本中的所有Unicode API函数确实需要UTF-16,而不是UCS-2。
*A
函数不同于
*W
函数,并且需要特定代码页中的字符串(并且最终开始允许UTF-8“页”)。映射到
A
W
版本的是未经修饰的版本(如
MessageBox
)。