vc win32 控制台应用程序中文乱码

时间:2024-03-10 14:37:05

vc2010 win32 控制台应用程序中文乱码

在 vc2010 上用 win32 控制台程序写些测试代码调用 windows api ,处理错误信息时,发现用 wprintf 输出的错误信息出现了乱码 ???????

整个代码的逻辑很简单,如下:

调用 windows api 并判断返回值,如果出错,用 GetLastError() 获取错误号 nLastError ,最后用 FormatMessage 获取错误信息

wchar_t szBuff[nSize+1] = L"";
if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        nLastError, 
        0,
        szBuff,
        nSize,
        NULL)) {
        wprintf(L"Format message Failed with %d\n", nLastError);
}
else {
    wprintf(L"%d -> %s\n", nLastError, szBuff);
}

但是,输出的错误信息里面却是乱码。

http://blog.csdn.net/testcs_dn/article/details/26164025 找到了原因和解决办法,使用 _wsetlocale 设置本地化能让中文正常显示。

#include <local.h>

...
_wsetlocale(LC_ALL, L"chs");
...

以前还没有遇到这个问题,无论是使用多字节还是 unicode 都很正常,不知道什么地方引起的,一个小坑。