例如,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的基本多语言平面之外显示任何东西?
答案 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字符(当然,如果有一种字体具有这些字符)。