Win32 API函数的编码期望是什么?

时间:2010-11-10 09:48:15

标签: unicode encoding winapi

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

MessageBox函数如何解释这些叮咬?哪种编码?

我设法找到的解释是:

http://msdn.microsoft.com/en-us/library/cwe8bzh0(VS.90).aspx

但它没有说编码?只是在_MBCS的情况下,一个字符占用一个wchar(在Windows上为16位),如果是_UNICODE则占用一个或两个字符(8位)。

那些微软的UTF-8和UTF-16版本忽略了在UTF-8情况下必须以3或4个字节编码的任何东西以及在UTF情况下必须以4个字节编码的任何东西-16?有没有办法在MessageBox的基本多语言平面之外显示任何东西?

2 个答案:

答案 0 :(得分:6)

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

  • MessageBoxA,接受ANSI字符串
  • MessageBoxW,接受Unicode字符串

此处,“ANSI”表示当前分配给流程的多字节代码页。这会根据用户的首选项和区域设置而有所不同,但可以依靠WideCharToMultiByte等Win32 API函数进行正确的转换,GetACP函数会告诉您正在使用的代码页。 MSDN explains the ANSI code page and how it interacts with Unicode.

'Unicode'通常表示UCS-2;也就是说,支持0xFFFF以上的字符不一致。我没有尝试过,但最近版本(> Windows 2000)中的MessageBox等UI功能应该支持BMP之外的字符。

答案 1 :(得分:4)

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