先上代码
wchar_t ss[10];
char *p;
ss[0] = _T('中');
ss[1] = _T('文');
ss[2] = _T('\0');
p = setlocale(LC_ALL, "zh-CN");
wprintf(L"%ls\n", ss);
printf("%s\n", p);
在用宽字符数组输出中文的时候用setlocale来设置地域,在使用第二个参数的时候出现了一点问题
(运行环境VC2010Express)
setlocale(LC_ALL, "chs");
或者
setlocale(LC_ALL, "");
都可以能正常输出中文汉字
但是我在微软的手册里面查不到chs这个参数,如下图
但是上图的所有参数,无论是简体中文还是繁体中文的参数在VC2010下使用都无法正常使用(意思是setlocale失败,返回值为NULL)
例如:
p = setlocale(LC_ALL, "zh-CN");
运行结果:
但是我在VS2017下测试了setlocale函数,发现上面微软手册里的所有简体中文还是繁体中文的参数都可以正常使用
p = setlocale(LC_ALL, "zh-CN");
运行结果:
还有一点非常奇怪的,我随便输了一个手册里面没有的参数,居然还能正常输出中文
问题一:chs这个参数在微软手册上查不到,为什么还能使用,我看到网上很多博客都使用的chs这个参数(微软手册链接:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c)
问题二:为什么在VC2010下,上面这些参数不能用,但是在VS2017下却都可以使用
问题三:为什么随便输入了一个参数zh-NC(手册里没有这个参数),却仍然能输出中文汉字
1 是否使用了utf-8
2 zh-CN.GBK
能详细点吗?