Windows环境下读取文件,输出中文乱码原因剖析及解决方案!
Posted CodeBowl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows环境下读取文件,输出中文乱码原因剖析及解决方案!相关的知识,希望对你有一定的参考价值。
问题描述
这俩天,遇到了一个问题,解析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环境下读取文件,输出中文乱码原因剖析及解决方案!的主要内容,如果未能解决你的问题,请参考以下文章
win10下使用vscode调试python输出中文乱码的解决办法