程序语句:
MessageBoxA(NULL,"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
能够正常输出"你好,视窗操作系统!",但是在字符串前加上L,即:
MessageBoxA(NULL,L"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
结果产生乱码按理说"你好,视窗操作系统!"是UNICODE编码,的而MessageBoxA是输出ASCII编码的字符串的,第一个应该编译错误或乱码才对啊,应该8位一个字符输出。我用语句:MessageBoxA(NULL,L"helloworld",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);测试,发现只输出一个h。这是预料中的,但是上面两条语句是怎么执行的呢,其内部是怎样转换的?
MessageBoxA(NULL,"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
能够正常输出"你好,视窗操作系统!",但是在字符串前加上L,即:
MessageBoxA(NULL,L"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
结果产生乱码按理说"你好,视窗操作系统!"是UNICODE编码,的而MessageBoxA是输出ASCII编码的字符串的,第一个应该编译错误或乱码才对啊,应该8位一个字符输出。我用语句:MessageBoxA(NULL,L"helloworld",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);测试,发现只输出一个h。这是预料中的,但是上面两条语句是怎么执行的呢,其内部是怎样转换的?
其编码是C4 E3 BA C3 A3 AC CA D3 B4 B0 B2 D9 D7 F7 CF B5 CD B3转换成unicode之后的编码是60 4F 7D 59 0C FF C6 89 97 7A CD 64 5C 4F FB 7C DF 7Eunicode编码之后,被MessageBoxA当成ASCII码解释,出现看起来的乱码是很正常的。
===========
你上面的"你好,..."这个没有加L也没有加_T,怎么会是UNICODE编码呢?应该是ASCII编码的。所以第一个编译和执行都是正确的。
MessageBoxA(NULL,"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);没有乱码,好好的它干嘛要乱码啊?
MessageBoxA(NULL,"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);不会乱码。
如果写成这样:
MessageBoxA(NULL,L"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
那么MessageBoxA会将"你好,...."这些UNICODE编码的字符解读为ASCII编码。此时就会产生乱码
MessageBoxW就是用来显示Unicode,所以汉字英文数字前要加_T(汉字英文数字)就譬如一个函数要求输入参数是整形,但是你给它浮点数作为参数并不会编译错误,但是结果当然将浮点数进行了截断
那么MessageBoxA(NULL,"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
为什么要出错? 宽字节函数 对应宽字节参数? 有什么问题?MessageBoxA(NULL,L"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
当然有问题 你设置的UNICODE编码 那么宽字节函数用UNICODE参数 为什么会没问题(当然也和中文有关)?MessageBoxA(NULL,L"helloworld",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
这个你懂了 我就不说了(当然也和不是中文有关)........
请使用
MessageBox
而不要使用
MessageBoxA
或者
MessageBoxW这样便于程序更改默认的编码
// MessageBoxA是 ANSI(MBCS) 函数, "你好,视窗操作系统!"是 ANSI(MBCS)编码,正好匹配,不会乱码MessageBoxA(NULL,L"你好,视窗操作系统!",TEXT("HelloMsg!"),MB_YESNO|MB_ICONWARNING);
// MessageBoxA是 ANSI(MBCS) 函数, L"你好,视窗操作系统!"是 unicode编码,不匹配,乱码