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环境下读取文件,输出中文乱码原因剖析及解决方案!的主要内容,如果未能解决你的问题,请参考以下文章

codeblocks输出结果中有乱码,是啥原因?

Windows系统中文乱码,最简单解决方案,调用函数即可!

win10下使用vscode调试python输出中文乱码的解决办法

php5.0 使用 fgets()函数是读取中文文件,显示乱码,求解谢谢

Windows下CLion中文乱码问题解决

Windows下CLion中文乱码问题解决