今天碰到一个问题,就是在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拷贝,或者大家可以直接

在VS2008的控制台程序中,从文本文件读取中文内容并用宽字符输出时遇到乱码问题。通过调用setlocale(LC_ALL, "chs")解决了这个问题。setlocale函数用于设置程序的本地化信息,确保正确显示中文。在使用setlocale后,可以成功输出中文,如果传入null参数,则会返回当前设置的locale信息。"
133659212,19974272,前端优雅页面刷新实现技巧,"['前端开发', 'JavaScript', '网页交互']
最低0.47元/天 解锁文章
2393

被折叠的 条评论
为什么被折叠?



