cmd 终端输出乱码问题 |Visual Studio 控制台输出中文乱码解决

在网上下载,或者移植别人的代码到自己的电脑,使用VS运行后,控制台输出中文可能出现乱码。这是因为源代码的编码格式和控制台的编码格式不一致。

文章目录

    • 查看源代码文件编码格式
    • 查看输出控制台编码格式
    • 修改编码格式
      • 修改终端代码页
    • 补充
    • 总结

查看源代码文件编码格式

打开项目文件夹,找到源代码文件,右击,打开方式选择「记事本」。在右下角会发现有一个编码格式的说明。常见的就是GB18030UTF-8 两种情况,GB是国标的缩写。
在这里插入图片描述
在记事本中点击另存为可以更改编码格式,这里不做赘述。

查看输出控制台编码格式

打开cmd命令行,会跳出控制台输出窗口,或者称作「终端」。
但是Visual Studio 通常使用的不是cmd窗口,因此我们需要编译运行我们的源文件。
右击控制台窗口(不是黑框),点击属性。
在这里插入图片描述
会跳出窗口的属性,在选项中,会有一个当前代码页。
其中,65001 表示UTF-8编码,936表示GB18030的编码。
在这里插入图片描述

修改编码格式

修改源文件的编码格式,最基本的方法就是上述提到的,在记事本中「另存为」,即可修改。

不过,源文件通常情况下很多,所以我们一般修改的是终端的编码。下面介绍下如何修改终端代码页,也就是编码格式。

修改终端代码页

方法一: 在代码的main程序中,可添加一段设定控制台编码的代码。
如果是C++,则可以使用:

    SetConsoleOutputCP(CP_UTF8);  // 输出编码设定SetConsoleCP(CP_UTF8);        // 输入编码设定

如果是C#,可以用这个:

        // 设置控制台输入输出编码为UTF-8Console.OutputEncoding = Encoding.UTF8;Console.InputEncoding = Encoding.UTF8;

方法二: 可提前在终端窗口的命令行提示符中,使用cmd命令修改编码。但是这种修改是暂时的,下一次打开,又得重新修改。

chcp 65001

既然可以通过命令行修改,那么我们则可以在写的程序中调用命令行,就无需手动修改。
调用系统命令的方法如下:

// C++
system("chcp 65001 > nul");  // 隐藏命令输出
// C#
System.Diagnostics.Process.Start("cmd.exe", "/c chcp 65001 > nul");

方法三: 修改注册表

修改注册表可以永久设置控制台窗口的编码格式。

  1. 按 Win+R 输入 regedit,打开注册表编辑器。
  2. 找到路径:
计算机\HKEY_CURRENT_USER\Console

在这里插入图片描述

  1. 找到Visual Studio 的 console.exe ,修改codePage即可。注意需切换到十进制,65001 才表示UTF-8编码,936 表示GB18030。

同样的,这个方法三 ,修改system32_cmd.exe ,则修改的是cmd窗口的编码格式,也是修改codepage即可。

「方法三」修改一次,后续则一直沿用设置,此外,写代码的时候,建议使用「方法一」,在代码中就把终端编码设置与源代码文件一致,这样可以保证放在其他电脑也不会出现乱码。

补充

VS的输出终端通常使用的是VS自带的控制台窗口,有的电脑安装了VS,但是在修改注册表时,在Console中,可能没有找到VS相关的 console.exe
我们依旧打开注册表,找到这个路径:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

右击新建 => 字符串值。这个时候,再找到之前说的Console路径,就会发现出现了与Visual Studio相关的控制台窗口了,修改codepage即可。

此外,这里列举一些与终端编码格式相关的cmd命令,在命令行窗口中可使用:
查看编码格式代码:

chcp

修改编码格式为UTF8:

chcp 65001

除了使用记事本,还可以如何查看源文件编码格式?可以通过VScode,sublime 等编辑器打开,都可以看到源文件的编码。如果偏偏想用Visual Studio打开源文件,且查看编码格式的话,可以在扩展管理器中搜索FileEncoding 安装使用。这样,用VS打开可以在右下角随时查看,并且每次写代码之前也可提前修改好编码格式,再开始写代码。
在这里插入图片描述

总结

通过修改注册表可以永久修改终端的编码格式,而如果想保险一点,可以在写代码时,就设定好终端控制台的编码格式。但除非代码需要移植,在我们自己的电脑上,自己写程序+编译运行,一般是不会出现乱码的,所以很少代码会有设定终端编码的习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A009-基于pytest的网易云自动化测试

题 目 :基于pytest的网易云自动化测试 主要内容 综合应用所学的软件测试理论和方法,实现网易云的功能自动化测试。 (1)自动化测试介绍; (2)自动化功能测试框架介绍; (3)设计功能测试用例 (4)书写自动化测试脚本; (5)测试评价与结论。 任务要求 (1)能…

LVGL Video控件和Radiobtn控件详解

LVGL Video控件和Radiobtn控件详解 一、 Video控件详解1. 概述2. 创建和初始化3. 基本属性设置4. 视频控制5. 回调函数6. 高级功能7. 注意事项 二、Radiobtn控件详解1. 概述2. 创建和初始化3. 属性设置4. 状态控制5. 组管理6. 事件处理7. 样式设置8. 注意事项 三、效果展示四、…

AbortController:让异步操作随时说停就停

AbortController:让异步操作随时说停就停 一、什么是 AbortController? AbortController 是 JavaScript 在浏览器和部分 Node.js 环境中提供的全局类,用来中止正在进行或待完成的异步操作(如 fetch() 请求、事件监听、可写流、数…

机器学习 从入门到精通 day_04

1. 决策树-分类 1.1 概念 1. 决策节点 通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。 2. 叶子节点 没有子节点的节点,表示最终的决策结果。 3. 决策树的…

C++ Primer (第五版)-第十三章 拷贝控制

文章目录 概述13.1拷贝、赋值与销毁合成拷贝构造函数拷贝初始化参数和返回值拷贝初始化的限制编译器可以绕过拷贝构造函数拷贝运算符析构函数三/五原则使用default阻止拷贝合成的拷贝控制成员可能是删除的 private拷贝控制拷贝控制和资源管理行为像值的类类值拷贝赋值运算符定义…

Vue el-from的el-form-item v-for循环表单如何校验rules(一)

实际业务需求场景: 新增或编辑页面(基础信息表单,一个数据列表的表单),数据列表里面的表单数是动态添加的。数据可新增、可删除,在表单保存前,常常需要做表单必填项的校验,校验通过以…

测试100问:http和https的区别是什么?

哈喽,大家好,我是十二,今天给大家分享的问题是:http和https的区别是什么? 首先我们要知道 HTTP 协议传播的数据都是未加密的,也就是明文的,因此呢使用 http协议传输一些隐私信息也就非常不安全&…

YOLOv3超详细解读(三):源码解析:数据处理模块

一、概述 YOLOv3(You Only Look Once v3)是一种高效的目标检测算法,其数据处理模块是训练和推理流程的核心部分。本文将深入分析Ultralytics团队基于PyTorch实现的YOLOv3源码中的数据处理模块,重点探讨数据加载、预处理和数据增强…

每日算法(双指针算法)(Day 1)

双指针算法 1.算法题目(移动零)2.讲解算法原理3.编写代码 1.算法题目(移动零) 2.讲解算法原理 数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp 双指针算法:利用数组下标来…

2025蓝桥杯python A组省赛 题解

真捐款去了,好长时间没练了,感觉脑子和手都不转悠了。 B F BF BF 赛时都写假了, G G G 也只写了爆搜。 题解其实队友都写好了,我就粘一下自己的代码,稍微提点个人的理解水一篇题解 队友题解 2025蓝桥杯C A组省赛 题…

测试基础笔记第四天(html)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 html介绍1. 介绍2.骨架标签3.常用标签标题标签段落标签超链接标签图片标签换行和空格标签布局标签input标签(变形金刚)form标签列表标签 htm…

10 穴 汽车连接器的15个设计特点

汽车行业严重依赖卓越的电气系统来确保功能和可靠性。这些系统的关键组件是 10 腔连接器,它为布线和信号传输提供解决方案。制造商和工程师必须仔细评估这些连接器的设计特性,以优化性能和安全性。 本博客研究了汽车 10 腔连接器的 15 个设计特征&#…

Summary

一、数据结构 1.1 哈希 主要是HashMap和HashSet&#xff1b;其中HashSet底层是一个HashMap属性。 // 获取HashMap元素,HashSet均不支持 map.keySet (); // Set<k> map.values (; // Collection<V> map.entrySet();//Set<Map.Entry<K,V>> for (Map.E…

【Leetcode-Hot100】最小覆盖子串

题目 解答 想到使用双指针哈希表来实现&#xff0c;双指针的left和right控制实现可满足字符串。 class Solution(object):def minWindow(self, s, t):""":type s: str:type t: str:rtype: str"""len_s, len_t len(s), len(t)hash_map {}for…

Flutter 播放利器:`media_kit` 的详细介绍与使用指南

在 Flutter 项目中实现音视频播放&#xff0c;开发者过去主要依赖如 video_player、just_audio 等第三方库&#xff0c;但这些库或多或少存在一些局限性&#xff0c;比如平台兼容性差、定制能力不足、播放格式有限等问题。 而 media_kit 是近年崛起的一款全平台音视频播放解决…

4.14【Q】pc homework3

我正在学习并行计算&#xff0c;解决这个问题&#xff1f;详细解释&#xff0c;越细节越好 我正在学习并行计算&#xff0c;“首次允许在 taskloop 构造中使用 reduction 子句&#xff0c;并引入了 task_reduction&#xff08;用于 taskgroup 构造&#xff09;和 in_reduction&…

ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 在 Java 开发中&#xff0c;集合类的选择直接影响程序的性能和代码的可维护性。不同的数据结构适用于不同的场景&#xff0c;盲目使用可能导致内存浪费、性能…

大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略

一、显存瓶颈的本质与挑战 大模型训练面临的核心矛盾是模型参数量指数级增长与GPU显存容量线性提升之间的鸿沟。以175B参数模型为例&#xff0c;其显存消耗主要来自三个方面&#xff1a; 参数存储‌&#xff1a;FP32精度下需700GB显存‌梯度缓存‌&#xff1a;反向传播产生的…

边缘计算与隐私计算的融合:构建数据经济的“隐形护盾“

在数据成为核心生产要素的今天&#xff0c;边缘计算与隐私计算的交汇正在重塑技术生态。这并非简单的技术叠加&#xff0c;而是一场关于数据主权、算力分配与信任机制的深度博弈。本文将从"数据流动的拓扑学"视角&#xff0c;探讨二者融合如何重构数字社会的基础设施…

Obsidian 文件夹体系构建 -INKA

Obsidian 文件夹体系构建 -INKA 本篇文章主要分享一下自己折腾学习实践过的 INKA 框架方法。原地址&#xff1a;Obsidian文件夹体系构建–INKA。 文章目录 Obsidian 文件夹体系构建 -INKA前言INKA简介INKA 理论最佳实践实际应用 反思 前言 上文 Obsidian文件夹体系构建-ACCES…