问题描述
这俩天,遇到了一个问题,解析json的时候,中文老是乱码。
复现后,发现读取文件时,遇到中文,在控制台输出的时候也会乱码,遂进行详细分析和解决。
问题复现
直接输出中文
//直接输出中文
void test1()
{
std::cout << "中文测试!" << std::endl;
}
直接控制台输出中文,没有毛病。
读文件
//读文件
void test2()
{
std::ifstream ifs("test2.txt");
std::stringstream ss;
ss << ifs.rdbuf();
std::string str(ss.str());
std::cout << str << std::endl;
ifs.close();
}
结果:

原因分析
第一步:首先确认问题是与字符编码格式有关的。
作者使用的编译器是vs2015,这里面由字符编码相关的有:
- 字符集 unicode和ascii
俩者尝试过后,没有效果
2.高级保存选项的编码格式
首先了解一下,这个编码有什么用?
网上没有找到相关解释,通过实验,大致应该是管理cpp文件编码的选项
3.文件编码格式
有一句话是,排除掉一些可能,那么剩下的哪一个,再不可能,也是真相。
查案过程:
- 使用notepad++打开文件
发现编码格式是utf-8.

修改编码为中文,试一下,发现乱码就是控制台输出的乱码

- 进一步分析
之前我一直使用的是默认的记事本编辑,于是猜测记事本实际上是以utf-8保存的(但是明明系统是gbk,很疑惑),所以利用notepad++重新以gb2312编辑(在上面的界面删掉乱码然后重新编辑就行),再用vs运行 - 测试一下
成功!ohhhhhhh

解决方案
将文件编码格式切换为中文

在Windows环境下使用C++读取文件时遇到中文乱码问题,通过分析文件编码格式(发现为UTF-8)并转换为GBK,解决了控制台输出乱码的现象。解决方案包括使用Notepad++将文件编码更改为GBK,然后在VS2015中运行程序,成功显示中文。
1万+

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



