正确代码:
#include "stdio.h"
#include "Windows.h"
#include <locale.h>
int wmain(int argc, wchar_t* argv[])
{
setlocale(LC_ALL, "chs");
wprintf(L"%s\n", L"中文字符");
}
其关键代码为:
setlocale(LC_ALL, "chs");
配置地域化信息函数
为什么一定要调用setlocale呢?
因为在C/C++语言标准中定义了其运行时的字符集环境为"C",也就是ASCII字符集的一个子集,那么mbstowcs在工作时会将cstr中所包含的字符串看作是ASCII编码的字符,而不认为是一个包含有chs编码的字符串,所以他会将每一个中文拆成2个ASCII编码进行转换,这样得到的结果就是会形成4个wchar_t的字符组成的串,那么如何才能够让mbstowcs正常工作呢?在调用mbstowcs进行转换之间必须明确的告诉mbstowcs目前cstr串中包含的是chs编码的字符串,通过setlocale( LC_ALL, "chs" )函数调用来完成,需要注意的是这个函数会改变整个应用程序的字符集编码方式,必须要通过重新调用setlocale( LC_ALL, "C" )函数来还原,这样就可以保证mbstowcs在转换时将cstr中的串看作是中文串,并且转换成为2个wchar_t字符,而不是4个。
本地化设置需要具备三个条件:
-
a. 语言代码 (Language Code)b. 国家代码 (Country Code)c. 编码 (Encoding)
-
本地名字可以用下面这些部分来构造:语言代码 _国家代码 .编码 比如( zh_CN.UTF-8,