Windows环境下读取文件,输出中文乱码原因剖析及解决方案!

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

问题描述

这俩天,遇到了一个问题,解析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
    在这里插入图片描述

解决方案

将文件编码格式切换为中文

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值