Windows 解决cmd/dos窗口中文乱码问题

news2024/11/17 9:46:09

文章目录

  • 一、问题描述
  • 二、解决方案
    • 1. 更改DOS窗口代码页
      • 方式1:更改dos窗口代码页(临时有效)
      • 方式2:修改注册表`CodePage`项(永久有效)
      • 方式3:修改 .lnk 快捷方式的文件属性(永久有效)
      • 方式4:修改注册表增加AutoRun项(永久有效)
    • 2. 更改批处理文件编码
      • 方式1:更改批处理文件编码方式


CMD/DOS窗口出现中文乱码及解决方案(以下演示是在Win10系统),本文提供了多种解决方案,总有一款适合你。

一、问题描述

有时候我们在cmd窗口执行命令或程序时,会看到cmd窗口出现中文乱码的问题
中文乱码问题
这主要是因为cmd窗口默认使用的是GBK编码,如果命令或程序输出的内容编码与cmd窗口使用的编码不一致,就会出现中文乱码的问题

二、解决方案

解决方案主要有两大类:
1.更改DOS窗口代码页;
2.更改批处理文件编码;

1. 更改DOS窗口代码页

如何查看当前窗口的代码页?
方式1:在dos窗口顶部右键菜单 > 属性 > 选项 tab页 > 当前代码页
方式2:在dos窗口输入chcp命令查看

C:\Users\cyinl>chcp /?
显示或设置活动代码页编号。
CHCP [nnn]
nnn   指定代码页编号。
不带参数键入 CHCP 以显示活动代码页编号。

(部分)代码页编号如下:

代码页描述
65001UTF-8 编码
950繁体中文
936简体中文 GBK (默认)
437MS-DOS 美国英语

如何更改dos窗口代码页?
更改dos窗口代码页又分为多种方式,每种方式各有优缺点。

方式1:更改dos窗口代码页(临时有效)

在dos窗口 执行chcp 65001更改dos窗口代码页
优点:切换代码页灵活,可以将chcp命令放到bat批处理文件内,临时更改控制台窗口的编码格式
缺点:仅对当前窗口生效的,其他窗口或新打开的dos窗口仍为默认的936

C:\Users\cyinl>chcp 65001
Active code page: 65001
C:\Users\cyinl> 

验证,执行curl www.baidu.com,可以看到中文乱码问题解决了解决中文乱码问题

方式2:修改注册表CodePage项(永久有效)

1)win+r 打开运行器,输入regedit 回车,打开注册表;
2)在路径计算机\HKEY_CURRENT_USER\Console\%SystemRoot%_System32_cmd.exe 找到CodePage 项(没有的话新建一个,DWORD类型);
3)修改CodePage的值为:十进制65001 (对应十六进制:fde9)保存即可
优点:一劳永逸
缺点:通过.lnk 快捷方式打开的dos窗口,默认仍是 936(就很奇怪)

修改CodePage注册表
对通过Win+R 打开运行,输入cmd 回车,打开的cmd窗口,进行验证
Win+
对通过文件资源管理器,地址栏输入cmd 回车,打开的cmd窗口,进行验证
文件资源管理器打开的cmd
对双击C:\WINDOWS\System32\cmd.exe,打开的cmd窗口,进行验证
双击cmd.exe打开的cmd窗口
开始菜单>Windows 系统>命令提示符搜索>输入cmd>命令提示符 打开的cmd窗口,进行验证
搜索栏打开cmd
开始菜单打开的cmd窗口
对执行bat批处理文件打开的cmd窗口,进行验证
test.bat 测试文件

@echo on
chcp
pause

双击test.bat批处理文件
执行批处理文件

注:开始菜单或搜索栏里打开的dos窗口,实际上是通过 xxx.lnk 快捷方式打开的

方式3:修改 .lnk 快捷方式的文件属性(永久有效)

1)找到‪C:\Windows\System32\cmd.exe 命令程序;
2)右键cmd.exe> 发送到>桌面快捷方式,创建一个cmd的快捷方式 cmd.exe - 快捷方式.lnk
3)桌面找到cmd的快捷图标,右键 > 属性 > 快捷方式 > 目标 后边增加 /K "chcp 65001"(注意跟 cmd.exe 之间有个空格),然后点击应用即可
优点:对 xxx.lnk 打开的dos窗口有效,可以弥补【方式2】注册表的CodePage 注册项对 .lnk 快捷方式打开的dos窗口不生效的不足
缺点:仅对修改的快捷方式的打开的dos窗口有效,如果有多个.lnk 快捷方式,需要分别进行修改

在这里插入图片描述
回到桌面双击cmd.exe - 快捷方式.lnk ,打开dos窗口,验证效果如下:
修改快捷方式属性
开始菜单>Windows 系统>命令提示符搜索>输入cmd>命令提示符 打开的dos窗口,进行验证,可以看到未生效
开始菜单打开的dos未生效
想要开始菜单搜索里打开的dos窗口也生效,需要修改对应的 .lnk 里的属性
操作步骤:
1)开始菜单搜索里找到命令提示符右键 > 打开文件位置
(我这里是C:\Users\cyinl\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools
2)找到命令提示符快捷方式,右键>属性>快捷方式>目标 后边增加 /K "chcp 65001",点击应用即可
命令提示符属性
开始菜单搜索打开dos窗口,进行验证,可以看到已生效
在这里插入图片描述

方式4:修改注册表增加AutoRun项(永久有效)

1)win+r 打开运行器,输入regedit 回车,打开注册表;
2)在路径计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor ,右键 > 新建 > 字符串值,重命名为AutoRun 项;
3)双击AutoRun,编辑数值数据为:chcp 937(注意这里我为了区分其他方式更改的效果,设置为了937)
优点:一劳永逸,且对所有途径打开的cmd都生效
缺点:命令行启动后首行显示的不再是Windows版权信息,而是"Active code page: xxx"(好像也不算什么缺点);另外就是对于快捷方式来说【属性】配置后执行于【AutoRun】的配置,后执行的会覆盖先执行的(这点应该难理解吧)

autorun注册表
对通过Win+R 运行cmd打开的dos窗口进行验证如下,可以看到 AutoRun配置已生效。
注意:【方式2】修改的注册表CodePage项,我并没有去掉,说明 AutoRun 配置覆盖掉了 CodePage 配置
在这里插入图片描述
双击桌面的cmd.exe - 快捷方式.lnk 图标,验证效果如下,可以看到注册表里的AutoRun配置已生效,但是紧接着被其他配置给覆盖了,最终代码页显示为 65001
注意:目前 cmd.exe - 快捷方式.lnk 有3处配置,结合上边的 AutoRun 配置会覆盖 CodePage,可以推测出,这里的 65001 是 快捷方式的【属性】配置起的作用
autorun运行效果
cmd.exe - 快捷方式.lnk属性里的 /K "chcp 65001" 去掉,然后重新打开dos窗口,验证上边的推测,从结果看 AutoRun 配置最终生效了(严格来讲是都生效了,只是后执行的会覆盖先执行的)
autorun+codepage
开始菜单>Windows 系统>命令提示符搜索>输入cmd>命令提示符 打开的dos窗口,进行验证。
注意:对于【开始菜单】或【搜索】打开的命令提示符,共有【方式2】【方式3】【方式4】3个配置,结合验证结果可以看出快捷方式【属性】配置最终生效了
在这里插入图片描述
对执行bat批处理文件test,bat,打开的dos窗口,进行验证。
注意:对于批处理文件,此时只有【方式2】【方式4】两处配置,可以看出【方式4】的AutoRun配置最终生效了
在这里插入图片描述

最后结论:
配置优先级 【快捷方式的属性】>【注册表的AutoRun】>【注册表的CodePage】,即 高优先级配置会覆盖低优先级配置(严格来讲这里说的优先级高,只是因为它后执行,把先执行的效果给覆盖掉了)

2. 更改批处理文件编码

通过更改批处理文件的编码方式,使文件的编码与DOS窗口的代码页对应

方式1:更改批处理文件编码方式

使用记事本,新建test2.bat批处理文件,内容如下,另存为,编码选择:ANSI

@echo on
echo 中文
pause

双击test2.bat批处理文件,执行效果如下:
test2.bat
是乱码没错,这是因为在前面演示过程中更改的AutoRun配置将dos窗口代码页设置为了437

到注册表里把AutoRun项删掉(这里就不演示怎么删了),然后再双击运行test2.bat
test2.bat运行效果
还是乱码,那就对了,聪明如你应该能想到,注册表里还有个CodePage 配置,配置的是:十进制 65001(对应 UTF-8),修改为 十进制 936(对应 ANSI/GBK)或删掉它!(不要问我怎么操作?我不会告诉你的!)

我这里改为936(我注册表里最初配置的就是936,这里相当于复原),再双击运行test2.bat,中文乱码问题解决了
正常显示中文



当然,你也可以在批处理文件里,在中文输出命令之前,使用chcp 更改dos窗口的代码页,使其与批处理文件的编码对应

使用记事本,新建test3.bat批处理文件,内容如下,另存为,编码选择:ANSI

@echo on
chcp 936
echo 中文
pause

双击运行test3.bat,进行验证
在这里插入图片描述



如果批处理文件保存时,编码选择:UTF-8,那么需要更改dos窗口的代码页为:65001,这里就不演示了。

总之就是保持批处理文件本身的编码方式与DOS窗口代码页对应,这样应该就不会出现乱码问题了



最后:
如果还有乱码问题,可以尝试在DOS窗口的属性里,改下字体试试。
窗口字体

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

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

相关文章

Minkube部署单节点kubernetes-1.23.7

minikube是一个快速构建单节点kubernetes的一个工具,用于快速构建本地测试和开发环境。 1、关闭防火墙和selinux systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i /SELINUX/s/enforcing/disabled/g /etc/selinux/config 2…

Vue 项目中使用WebSocket 消息推送

一、功能需求 1.这是我在后台管理项目中使用到的,主要的作用是搞一个消息提醒的功能。 2.主要有右上角的提示和有下角的消息弹框。 3.主要实现的功能是如果用户有未读的消息,那么首次登录就弹框,如果用户关闭了页面,那么再次刷新…

手把手教学使用宝塔面板部署前后端分离项目(全面详细)

前言:平日里我们的前后端项目基本上都是通过linux系统提供的dos命令去部署,有没有一种更简单的方式去部署我们自己的项目呢,答案是有的,本篇博客就是手把手教学如何通过一个可视化的页面去部署我们自己开发的前后端分离项目。 目录…

【Java项目】解决请求路径上明文ID传输导致可能被攻击的方法

文章目录 问题思路解决 问题 这个问题是我公司的一个小业务问题,问题来源于我们发送请求的时候,请求路径上携带的是明文,比如http://xxx/xxx/id12345,那么别有用心的人就可能会推测出id的生成策略,导致遍历id&#xf…

【需求实现】Tensorflow2的曲线拟合(一):数据集分割

神经网络中输入多少数据就输出多少数据的情况如何实现 导读数据集长什么样?怎么分割数据集?时间窗口分析模板我知道你很急,但你先别急 换个思路 导读 在实习的过程中遇到了这样一种需求:给定一条序列,并另外给定一条期…

vue如何封装一个上传多张图片的组件

上传图片不管是后台还是前端小程序,上传图片都是一个比不可少的功能有时候需要好几个页面都要上传图片,每个页面都写一个非常不方便,这时候就没有封装起来用的方便。跟上我的步伐带你了解如何封装 首先:创建一个文件夹在component…

【FFmpeg实战】过滤器 ---- h264_mp4toannexb

原文地址:https://www.cnblogs.com/vczf/p/13818609.html H264有两种封装方式:字节流AnnexB格式 AVCC格式。 1. AnnexB格式 ---- 用于实时播放 开始前缀(00000001或000001)+NALU数据  绝大部分编码器的默认输出格式…

leetcode题目1481. 不同整数的最少数目

题目 不同整数的最少数目 给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。 示例 1: 输入:arr [5,5,4], k 1 输出:1 解释:移除 1 个 4 &#xff0c…

初识消息队列

消息队列 字面意思就是存放消息的队列(Message Queue 简称MQ),最简单的消息队列模型包括了三个角色: 消息队列:存储和管理信息,也被称为消息代理生产者:发送消息到消息队列消费者:从消息队列中获取消息并…

基于TensorFlow和Keras的狗猫数据集的分类实验

文章目录 前言一、环境配置1、anaconda安装2、修改jupyter notebook工作目录3、配置TensorFlow、Keras 二、数据集分类1、分类源码2、训练流程 三、模型调整1.图像增强2、网络模型添加dropout层 四、使用VGG19优化提高猫狗图像分类1、构建网络模型2、初始化一个VGG19网络实例3、…

C语言--消失的数字

文章目录 1.法一&#xff1a;映射法2.法二&#xff1a;异或法3.法三&#xff1a;差值法4.法四&#xff1a;排序查找 1.法一&#xff1a;映射法 时间复杂度&#xff1a;O&#xff08;N&#xff09; 空间复杂度&#xff1a;O&#xff08;N&#xff09; #include<stdio.h>…

第4章 信息系统管理

文章目录 4.1.1 管理基础1 层次结构2 系统管理 4.1.2 规划和组织1 规划模型2 组织模型1&#xff09;业务战略&#xff08;竞争力优势模型&#xff1a;差异化、总成本领先、专注 战略&#xff09;2&#xff09;组织机制战略&#xff08;莱维特钻石模型&#xff1a;信息与控制、人…

【C++学习】类和对象 | 再谈构造函数 | 构造函数中的隐式类型转换 | static静态成员

目录 1. 再谈构造函数 2. 构造函数中的隐式类型转换 3. static静态成员 写在最后&#xff1a; 1. 再谈构造函数 我们之前使用构造函数初始化&#xff1a; #include <iostream> using namespace std;class Date { public:Date(int year 2023, int month 7, int da…

arcgis js 通过某一个经纬度 定位报错,并且图标变得很大【已解决】

报错 svg.js:42 Error: attribute transform: Expected number, “…0000,0.02102085,NaN,NaN)”. svg.js:49 Error: attribute x: Expected length, “NaN”. svg.js:49 Error: attribute y: Expected length, “NaN”. 图标特别大&#xff0c;也看不到地图 分析 这个方法中…

智驾“平价”,小鹏G6打特斯拉是认真的

作者|张祥威编辑|德新 “小鹏在辅助驾驶领域不是遥遥领先&#xff0c;而是领先友商 12 - 36 个月。” “希望L4的能力能够在2027年到来&#xff0c;或者更早一点。” “G6的销量肯定要过万&#xff0c;这是最起码的。” G6上市发布期间&#xff0c;小鹏的高管各种喊话。 抛开80…

(嵌入式)STM32G061C8T6、STM32G061C6T6、STM32G061C8U6 64MHz 64KB/32KB 闪存(MCU)

STM32G0 32位微控制器 (MCU) 适合用于消费、工业和家电领域的应用&#xff0c;并可随时用于物联网 (IoT) 解决方案。这些微控制器具有很高的集成度&#xff0c;基于高性能ARM Cortex-M0 32位RISC内核&#xff0c;工作频率高达64MHz。该器件包含内存保护单元 (MPU)、高速嵌入式内…

算法笔记--滑动窗口

力扣209.长度最小子数组 https://leetcode.cn/problems/minimum-size-subarray-sum/ 在这道题中要注意的不仅仅是滑动窗口的问题&#xff0c;更重要的问题是在循环控制中&#xff0c;不恰当的语法使用会导致这道题出现很严重的问题&#xff0c;这导致我做这道题做了很多天&…

亿级数据毫秒级响应?

作为一名深陷在增删改查泥潭中练习时长三年的夹娃练习生&#xff0c;偶尔会因为没有开发任务不知道周报写什么而苦恼。 正愁这周写啥呢&#xff0c;组长过来交代了个跟进第三方公司性能测试报告的工作&#xff0c;我一寻思这活不最好干了吗&#xff0c;正愁不知道周报咋写呢&a…

github上传文件及其问题解决

文章目录 1. github上上传文件夹2. <filename> does not have a commit checked out3. this exceeds GitHubs file size limit of 100.00 MB4. error: src refspec master does not match any 1. github上上传文件夹 首先在github上create a new repository&#xff0c;…

C语言王国探险记之字符串+注释

王国探险记系列 文章目录&#xff08;3&#xff09; 前言 一&#xff0c;什么是字符串呢&#xff1f; 1&#xff0c;那C语言是怎么表示字符串的呢? "hello world.\n" 2&#xff0c;证明字符串的结束标志是一个 \0 的转义字符 3&#xff0c;证明字符串的结束标…