解决所有终端中文输出乱码的问题

news2024/11/26 9:26:24

一、系统自带的cmd.exe 以及 Git的bash.exe、sh.exe、git-bash.exe和git-cmd.exe,和PowerShell默认使用“当前系统区域设置”设定好的936 (ANSI/OEM - 简体中文 GBK)语言编码。

1、[当前代码页] 的936 (ANSI/OEM - 简体中文 GBK) 是导致中文乱码的原因

控制面板→区域→管理→更改系统区域设置,当前系统区域设置(C) 为:中文(简体,中国)。其对应的语言编码是:936 (ANSI/OEM - 简体中文 GBK)。

系统自带的cmd.exe 以及 Git的bash.exe、sh.exe、git-bash.exe和git-cmd.exe 和Powershell以此为依据,在注册项CodePage设置为936。

导致“属性”→ “选项”中,其【当前代码页】的编码固定在936 (ANSI/OEM - 简体中文 GBK)。

2、这样会导致什么问题呢?

(1) 问题一: 【属性】选项的【字体】无法识别自定义文字样式,【默认值】选项可选自定义字体样式,却无法覆盖【属性】选项

【属性】里面,【选项】的“当前代码页”编码为936 (ANSI/OEM - 简体中文 GBK)时,【字体】无法识别自定义文字样式,比如:CaskaydiaMono NFM。此处只能选择类似于“新宋体”、“隶书”、“楷体”等样式。

选择【默认值】时,虽然可以选择自定义下载的字体,但是无法覆盖【属性】选项里面的字体样式,字体的样式还是“新宋体”

(2) 问题二:在使用git命令输出中文时会有乱码

因为【当前代码页】编码(即控制台编码格式)固定在936 (ANSI/OEM - 简体中文 GBK),而这些控制台依赖的git.exe默认编码格式为utf-8,由于编码格式不一致,程序运行时往往会出现中文乱码的情况。

此时在D:/Git/etc目录下,往配置文件 (例如:bash.bashrc、profile、gitconfig) 中设置编码为utf-8的语句也没有任何作用。比如下图:bash.bashrc中设置编码为utf-8,对解决控制台的中文乱码没有任何作用。

3、解决方法:把注册表中Console(控制台)的CodePage(当前代码页)选项的编码修改为65001(utf-8)

(1) Win+R,输入regedit,定位到 [计算机\HKEY_CURRENT_USER\Console\]

(2) 把常用的终端(控制台)的CodePage设置为65001(utf-8)

有CodePage选项的,点击【十进制】的基数,设置为65001(utf-8)。没有CodePage选项的请自行新建。

① 系统自带的CMD

② D:/Git/bin/bash.exe

③ D:/Git/bin/sh.exe

因为sh.exe没有CodePage选项,我们需要右键→新建→DWORD(32位)值。命名该项为:CodePage。十进制值为65001。

④ D:/Git/bin/git-bash.exe 和 D:/Git/bin/git-cmd.exe

同上设置,我们需要右键→新建→DWORD(32位)值。命名该项为:CodePage。十进制值为65001。

⑤ 单独使用PowerShell时,控制台输出中文乱码
[1] 方法1:在Microsoft.PowerShell_profile.ps1配置文件中设置utf-8编码

在PowerShell中输入$profile,查看.ps1配置文件的路径

编辑Microsoft.PowerShell_profile.ps1。在里面添加以下语句。

#8. 设置Powershell控制台输出结果的编码为utf-8,解决输出中文乱码的问题

$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

[2] 方法2:打开regedit,定位到:计算机\HKEY_CURRENT_USER\Console\。给所有PowerShell选项新建类型为DWORD(32)值的CodePage项,点击【基数:十进制】,写入数值:65001 (utf-8),从源头解决中文乱码问题。

以上方法只能解决:[单独使用PowerShell时,控制台输出中文乱码] 的问题

⑥ 使用Terminal来挂靠PowerShell时,控制台输出中文乱码

当我们使用Terminal来挂靠PowerShell时,Terminal会默认使用系统的GBK编码,覆盖了PowerShell在注册表设置的CodePage值:65001(utf-8)。导致输出到控制台时会有中文乱码。

方法1的做法,不仅可以避免上述问题。单独使用PowerShell时也会避免中文乱码。

在PowerShell中输入$profile,查看.ps1配置文件的路径

编辑Microsoft.PowerShell_profile.ps1。在里面添加以下语句。

#8. 设置Powershell控制台输出结果的编码为utf-8,解决输出中文乱码的问题

$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

再次测试,不再有中文乱码。

(3) 总结

① 对于系统自带的cmd.exe 以及 Git的bash.exe、sh.exe、git-bash.exe和git-cmd.exe ,遇到在控制台输出中文乱码的问题,建议进入regedit注册表中,新建或修改DWORD类型的CodePage的值,统一为:65001 (utf-8)

单独使用Powershell.exe,遇到在控制台输出中文乱码的问题,有两种解决方法:

方法1:通过$profile定位到.ps1配置文件,输入以下语句:

#8. 设置Powershell控制台输出结果的编码为utf-8,解决输出中文乱码的问题

$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

方法2:进入regedit注册表中,新建或修改DWORD类型的CodePage的值,统一为:65001 (utf-8)

使用Terminal来挂靠PowerShell,遇到在控制台输出中文乱码的问题,有一种解决方法:

方法1:通过$profile定位到.ps1配置文件,输入以下语句:

#8. 设置Powershell控制台输出结果的编码为utf-8,解决输出中文乱码的问题

$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

所以对于PowerShell来说,使用方法1可以直接解决控制台输出中文乱码的问题。方法2可用可不用。不会影响方法1。两个方法同时使用也行。

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

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

相关文章

[分布式网络通讯框架]----Protobuf安装配置--附带每一步截图

Protobuf Protobuf(Protocol Buffers)协议是一种由 Google 开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景。 为什么要使用Protobuf Protobuf 在许多领域都得到…

网上零食销售系统

摘 要 随着互联网的快速发展,网上销售已成为零售业的重要组成部分。在众多的线上购物品类中,零食销售因其受众广泛、购买频率高、消费金额适中等特点,一直备受关注。然而,传统的零食销售方式,如实体店铺销售&#xff…

web前端——css(一篇教会网页制作)

目录 一、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 二、选择器 1.标签选择器 2.类选择器 3.id 选择器 4.通配选择器 三、常见修饰 1.文本 2.背景 3.列表 4.伪类 5.透明度 6.块级、行级、行级块标签 7.div 和 span 四、盒子模型(重点&…

Reqable实战系列:Flutter移动应用抓包调试教程

Flutter应用网络请求调试一直是业内难题,原因在于Dart语言标准库的网络请求不会走Wi-Fi代理,常规通过配置Wi-Fi代理来抓包的方式行不通。这给我们日常开发测试造成了很大的阻碍,严重降低工作效率。因此写一篇教程,讲解如何使用Req…

vue的ESLint 4格缩进 笔记

https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一,代码4格缩进设置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自动修复命令 npx eslint --fix "src/**/*.{…

ONLYOFFICE 8.1编辑器桌面应用程序来袭——在线全面测评

目录 ✈下载✈ 👀界面👀 👊功能👊 🧠幻灯片版式的重大改进🧠 ✂无缝切换文档编辑、审阅和查看模式✂ 🎵在演示文稿中播放视频和音频文件🎵 🤗版本 8.1&#xff1a…

CDGA数据治理:数字化时代的基石

随着数字化浪潮的汹涌而来,数据已成为当今世界的核心驱动力。无论是企业决策、市场趋势预测,还是个性化用户体验,都离不开数据的支撑。而在这一过程中,数据治理的重要性日益凸显,成为实现数字化转型、发挥数据价值的最…

Django 如何使用视图动态输出 CSV 以及 PDF

Django 如何使用视图动态输出 CSV 以及 PDF 这一篇我们需要用到 python 的 csv 和 reportLab 库,通过django视图来定义输出我们需要的 csv 或者 pdf 文件。 csv文件 打开我们的视图文件 testsite/members/views.py 。新增一个视图方法: import csv …

Java反射获取--类对象(class对象),3种方式

Java反射获取–类对象(class对象),3种方式 前言 内容节选个人oneNote个人笔记,分享Java反射获取--类对象(class对象),3种方式

mac 安装mysql启动报错 ERROR!The server quit without update PID file

发现问题: mac安装mysql初次启动报错: 一般出现这种问题,大多是文件夹权限,或者以前安装mysql卸载不干净导致。首先需要先确定问题出在哪?根据提示我们可以打开mysql的启动目录,查看启动日志。 问题解决&a…

关键路径——C语言(理论)

关键路径,是项目网络中从起始事件到终止事件的最长路径,决定了项目的最短完成时间。 关键路径中的任务没有任何可调整的余地,如果任何一个任务被延迟,整个项目的完成时间也会被延迟。 假设我们现在有一个图:把图的边…

Android开发系列(十二)Jetpack Compose之BottomSheet

BottomSheet 是 Android 中一个常用的 UI 组件,它通常用于显示从屏幕底部弹出的用户界面。Jetpack Compose 是 Android 中的一个全新 UI 工具包,它提供了一种声明式的方式来构建用户界面。Jetpack Compose 中也有一个名为 BottomSheet 的组件&#xff0c…

2、Redis持久化与高可用架构

一、Redis 持久化 RDB 快照(Snapshot) 基本概念:RDB(Redis DataBase)快照是将 Redis 内存中的数据在某个时间点保存到磁盘中的一种持久化方式,默认保存到 dump.rdb 的二进制文件中。通过 RDB 快照&#xff…

嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成 1 介绍1.1 概述1.2 嵌入式 Linux 的组成1.3 U-Boot1.4 Linux 内核1.5 设备树1.6 根文件系统 参考 1 介绍 1.1 概述 一个完整的 linux 系统,通常包含了 U-Boot、kernel、设备树以及根文件系统。 1.2 嵌入式 Linux 的组成 1.3 U-…

苹果电脑有什么好玩的游戏 Windows电脑上的游戏怎么在Mac电脑玩

苹果电脑不仅在工作和生产领域备受推崇,其游戏领域也同样令人惊艳。从经典的策略游戏到刺激的竞技游戏,苹果平台上有着丰富多样的游戏选择,满足了不同玩家的喜好和需求。下面我们来看看苹果电脑有什么好玩的游戏,Windows电脑上的游…

ET9中ETTask传递新的Context原理

ET9中ETTask传递新的Context原理 前言 每一个异步函数都会创建两个对象, 第1个是当前异步函数返回值(ETTASK)对应的ETAsyncTaskMethodBuilder,通过这个类的静态方法Create创建返回,这个builder类中会有一个Task对象&…

003GeoGebra如何无缝嵌入到PPT里

GeoGebra无缝嵌入到PPT里真是一个头疼的问题,已成功解决,这里记录一下,希望可以帮助到更多人。 注意,后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦,我已经戒WPS了(此处表示无奈&…

shell 脚本中断问题定位

shell 脚本中断问题定位 1 介绍2 定位方法2.1 查看脚本的退出状态码2.2 查看系统日志文件2.3 使用journalctl工具2.4 使用dmesg命令2.5 检查脚本自身的日志记录2.6 使用图形界面工具2.7 配置和使用集中式日志管理系统 参考 1 介绍 shell 脚本运行,一段时间后&#…

视频编解码从H.264到H.266:浅析GB28181安防视频汇聚EasyCVR视频压缩技术

随着信息技术的飞速发展,视频编解码技术也在不断革新,以适应高清、超高清甚至8K视频时代的到来。视频编解码技术作为数字多媒体领域的核心技术之一,也在不断地演进和革新。从早期的H.261到现在的H.265、H.266,每一次技术的升级都极…

lambda-map.merge

map.merge 结论: 1.当前传入的 key ,value biFunction 2.如果之前map不存在则直接put(当前key,当前value) 3.如果之前map已经有了,老value与 当前value 进入function处理后再 put(当前key,处理后的value)