今天碰到一个问题,就是在VS2008下面的控制台程序里面,从一个文本文件里面读取出相应的内容,中文的,然后想到控制台下面显示出来,过程都很顺利,先读取出来放到char* cpContent里面,然后利用MultiByteToWideChar转换成宽字符wchar_t * wpContent,然后利用wprintf进行输出,在调试的时候,可以看到wpContent里面存放的是中文内容,但是输出之后却显示乱码。开始不知道为什么?后来在wprintf输出之前,加了一句代码
setlocale(LC_ALL, "chs");
中文内容立马就输出成功了。
后来仔细看了一下,原来是这个样子的
setlocale:本函数用来配置地域的信息,设置当前程序使用的本地化信息。
当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。
那么就与我们要求输出的不一致了,因此要进行相应的设置setlocale(LC_ALL, "chs");
//
这个函数的参数还有其他的输入,大家可以看一下相关说明。
函数的相关定义如下(下面直接从MSDN拷贝