问题描述
这俩天,遇到了一个问题,解析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
解决方案
将文件编码格式切换为中文
|