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

Windows 解决cmd/dos窗口中文乱码问题 Windows 解决cmd/dos窗口中文乱码问题,本文提供了多种解决方案,总有一款适合你! 阅读详情

问题描述

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

解决方案

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

CLion中文乱码终极解决方案:从文件编码到CMake配置全流程指南 本文深入解析了在Windows系统下使用CLion配合MinGW开发C/C++程序时出现中文乱码的根本原因,即UTF-8与GBK编码在文件、编译器、控制台等环节的冲突。文章提供了从统一IDE文件编码、配置CMake编译参数(如-fexec-charset=GBK),到运行时修改控制台代码页乃至启用系统级UTF-8支持的全流程系统化解决方案,帮助开发者彻底根治乱码问题。 阅读详情

相关推荐

Python读取Excel中文乱码:从编码原理到实战解决方案

字符编码是计算机存储和处理文本的基础,它定义了字符与二进制数据之间的映射规则。当编码与解码规则不匹配时,就会出现乱码问题,这在处理包含中文等非ASCII字符的数据时尤为常见。从技术价值看,正确理解编码原理能确保数据在存储、传输和读取过程中的完整性,避免信息失真。在工程实践中,特别是在使用pandas进行数据处理时,编码问题直接影响数据质量和工作效率。本文聚焦于Python读取Excel文件时遇到的中文乱码场景,深入分析其根源,并提供从快速修复到根治的多种解决方案,包括指定编码参数、二进制读取等实用技巧,帮助

优快云头条 942

c++ 读文件,读取到中文如果是乱码的处理方式。

#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;windows.h&gt; using namespace std; string UTF8ToGB(const char* str) { string result...

qd1006739486的博客 2万+

Windows下Qt Creator中文乱码终极解决方案:从编码设置到代码实战

本文深入剖析了Windows下Qt Creator中文乱码问题的根源,指出其本质是字符编码在源码保存、编译器解读、Qt运行时等多个环节的不一致。文章提供了从Qt Creator环境配置、项目级设置到代码实战的系统化解决方案,特别强调了统一使用UTF-8编码并正确处理QString转换,是解决中文乱码问题的终极指南。

stone的博客 705

[C++]ifstream和getline获取中文乱码解决方案

vc++

翻肚鱼儿的博客 1914

C++读取中文文本文件乱码问题:从编码原理到跨平台解决方案

字符编码是计算机处理文本信息的基础,它定义了字节序列与字符之间的映射规则。其核心原理在于为每个字符分配唯一的数字标识,并通过特定算法进行存储和传输。在C++工程实践中,正确处理字符编码对于确保文本数据的正确读写、显示和交换至关重要,尤其是在处理多语言和跨平台应用时。当文件存储编码与程序解释编码不一致时,就会出现乱码问题,这直接影响到文本分析工具、游戏本地化、日志处理等场景的数据可靠性。本文聚焦C++文件操作中的经典乱码难题,深入剖析std::ifstream与多字节编码(如UTF-8、GBK)冲突的根源,并

weixin_34292402的博客 508

Keil5中文乱码的解决技巧通俗解释(Windows)

遇到Keil5中文乱码问题不用慌,通过调整编码设置和字体配置即可轻松解决。掌握keil5中文乱码的解决方法,能有效提升开发环境的可读性与使用体验,特别适合中文用户在Windows平台下快速修复显示异常。

weixin_29607511的博客 837

简单常识——关于stream

从文件中读入一行 简单,这样就行了: ifstream ifs("input.txt");char buf[1000];ifs.getline(buf, sizeof buf); string input(buf); 当然,这样没有错,但是包含不必要的繁琐和拷贝,况且,如果一行超过1000个字符,就必须用一个循环和更麻烦的缓冲管理。下面这样岂不是更简单? string input;input.re...

feipigwang 342

Qt Creator中文乱码终极解决方案:从编码设置到控制台输出的完整指南

本文深入剖析了Qt Creator在Windows环境下中文乱码问题的根源,提供了从源文件编码、编译器配置、运行时处理到控制台输出的四层系统性解决方案。针对GBK与UTF-8编码冲突这一核心痛点,文章详细介绍了如何统一项目编码、配置MSVC/MinGW编译器选项,并优化控制台输出,确保中文显示正常。

weixin_29001683的博客 576

ifstream 打开中文路径乱码问题处理

ifstream 打开中文路径乱码问题处理 使用vs2008. 发现使用ifstream打开中文路径乱码。然后查了好久。发现使用下面的法子可以了。 记录一下。 附上代码: std::locale loc1 = std::locale::global(std::locale(".936")); //字符语言设置 //读文件 ...

谁吃薄荷糖 2421

Windows批处理文件中文乱码终极解决方案:Notepad++与chcp 65001双管齐下

本文深入解析Windows批处理文件中文乱码的根本原因,并提供从根源到实战的完整解决方案。核心方案是结合使用Notepad++编辑器将文件保存为UTF-8无BOM格式,并在脚本中通过chcp 65001命令设置控制台代码页,双管齐下彻底解决编码问题。文章还涵盖了系统级永久配置、高级场景处理及团队协作规范,帮助用户构建稳健的脚本运行环境。

weixin_29208077的博客 185

别再被INI中文乱码坑了!C#读写配置文件时指定Encoding.UTF8的完整避坑指南

本文详细解析了C#读写INI文件时中文乱码问题的根源,并提供了完整的解决方案。通过指定Encoding.UTF8编码、处理BOM标记以及封装健壮的INI工具类,帮助开发者彻底解决跨环境部署中的乱码问题,提升配置文件的可靠性和兼容性。

cuikuangru5755的博客 349

Windows系统区域设置对非Unicode程序读取ini文件中文内容的影响与解决方案

本文深入探讨了Windows系统区域设置对非Unicode程序读取ini文件中文内容的影响。当系统区域设置与文件编码不匹配时,程序会因使用错误的代码页解码而导致中文乱码。文章分析了问题根源,并提供了修改系统区域设置、升级程序使用Unicode API、配置文件去中文化及运行时动态指定编码等多套解决方案,帮助开发者和用户彻底解决这一经典编码问题。

vodka的博客 675

Qt Creator中文乱码终极解决方案:从环境配置到代码实战(2024最新版)

本文深入剖析Qt Creator开发中中文乱码的根本原因,即字符编码错配问题,并提供2024年最新的跨平台终极解决方案。文章从环境配置入手,指导用户统一设置UTF-8编码,并详细讲解在控制台输出、UI界面显示及文件处理等不同场景下的代码实战技巧,帮助开发者彻底解决这一常见难题。

weixin_27960253的博客 280

解决Qt中C语言printf输出中文乱码的编码冲突

本文深入分析了Qt Creator中C语言printf输出中文乱码的根本原因,即UTF-8与GBK编码冲突。文章提供了四种实测有效的解决方案:将项目编码改为GBK、配置控制台支持UTF-8、在代码层进行编码转换以及使用Qt自身的输出机制,并给出了不同场景下的选择建议和避坑指南。

weixin_29015127的博客 621

QT项目中文可执行文件名乱码:从编码原理到多环境解决方案

在跨平台软件开发中,字符编码是影响构建稳定性的关键因素。UTF-8作为通用编码标准,其BOM(字节顺序标记)机制能有效帮助解析器识别编码格式。然而,当构建工具链(如qmake)与编译器(GCC/MSVC)对非ASCII字符的处理策略不一致时,就会导致可执行文件名等元数据出现乱码。这一问题的技术价值在于理解构建系统从源文件到二进制产物的完整字符流处理链路,涉及文件编码解析、参数传递和系统API调用等多个环节。在QT开发中,中文TARGET乱码是典型的编码不匹配案例,其应用场景广泛存在于需要本地化部署或面向中文

weixin_30700977的博客 416

vscode运行C语言文件,printf的中文在终端可以正常显示,scanf输入中文后再打印就会乱码,为什么?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1600

3.Windows中文乱码根源与UTF-8统一解决方案

本文是为了解决文件编码异常导致的中文乱码问题。

2302_77823855的博客 1573

Java读取中文文件乱码问题深度解析与解决方案

htmltable {th, td {th {pre {简介:在Java开发中,读取中文文件时因字符编码不匹配常导致乱码问题。本文详细分析了ASCII、GBK、UTF-8等编码原理,指出Java默认使用平台编码可能导致跨系统兼容性问题,并提供了多种解决方案,包括使用InputStreamReader指定编码、利用Files.newBufferedReader结合StandardCharsets、设置IDE编码规范、处理BOM头及检测未知编码等方法。

weixin_34945060的博客 1179
上一篇: Windows编程下的字符串格式及编码问题
下一篇: CMake学习:使用camke创建一个最简单的跨平台c++项目
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值