栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Windows读文件中文乱码
    • 问题描述
    • 问题复现
      • 直接输出中文
      • 读文件
    • 原因分析
      • 3.文件编码格式
    • 解决方案

问题描述

这俩天,遇到了一个问题,解析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
解决方案

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号