如何让Windows的命令行窗口CMD以及Powershell支持UTF8字符集(编码)
我在CMD命令行窗口中运行PHP脚本时遇到输出中文乱码的问题,如下图:
起初我也是很迷茫,以为是PHP的问题,检查了脚本(客户端和服务端都是utf-8)编码已经统一了,为何还是乱码呢,卡壳很久之后突然反应过来会不会是Windows的问题,于是把脚本拿到linux下运行,一切正常,至此可以确定是命令行窗口的编码和脚本编码不一致导致的。
简体中文,也就是GB2312(或者GBK等)字符集,在我们平时的使用CMD时也没什么问题,因为系统内字符集是统一的,但是当我们使用命令行执行一些外部脚本的时候就有可能出现中文乱码(因为大多数脚本为了支持更多语言,都会选用unicode编码,常见的就是utf-8),比如我上面提到的PHP脚本。
那么我们应该如何做,才能切换CMD的编码呢,往下看:
在谷歌娘和度娘哪里问了一大圈,都说要把字体改成Lucida Console,可是哪里有什么Lucida Console这个字体,你们看,只有点阵字体和新宋体(甚至有些朋友连新宋体都没有)。
然后又想到了CHCP这个命令,嗯,我们可以用它查看当前代码页,也可以用他修改当前代码页
CHCP是MS DOS中的命令,用来显示或设置活动代码页编号的。用法是:
CHCP [number]
其中number指定的是代码页的编号。这个参数是可选的,在命令行下如果不指定这个代码页编号,那么默认是显示当前的代码页编号。比如,在默认的cmd窗口中,我们输入chcp,显示的将类似下图这样的结果,936(简体中文的意思):
然后去查各个编码集的代码页编号,找到UTF-8的代码也编号是:65001
那么我们的解决方法就出来了:
1.执行命令: chcp 65001
2.切换字体为:Lucida Console(PS:我在执行了第1步命令之后,字体自动变成了Lucida Console)
这个时候,我们脚本输出的中文就不再是乱码啦,如下图:
最后,列个表,把代码页编码记录一下。
国家(地区)/语言 | 代码页编号 |
---|---|
美国/英语 | 437 |
日文 | 932 |
韩文 | 949 |
简体中文 | 936 |
繁体中文 | 950 |
UTF-8 | 65001 |
多语言(拉丁文Ⅰ) | 850 |
斯拉夫语(拉丁文Ⅱ) | 852 |
西里尔文(俄语) | 855 |
土耳其语 | 857 |
葡萄牙语 | 860 |
冰岛语 | 861 |
加拿大-法语 | 863 |
日耳曼语 | 865 |
俄语 | 866 |
现代希腊语 | 869 |
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息: 原文出处:Yiiven https://www.yiiven.cn/set-utf8-for-cmd.html
相关文章
- 使用docker搭建私有git服务(gogs+https)
- golang的goproxy
- C/C++ 实现简易特征码扫描器
- C/C++ ImGUI劫持Dx9绘制窗体
- C/C++ 实现文件自校验代码
- C/C++ 获取系统IP地址/硬件信息等
- C/C++ 获取本机IP地址信息
- C/C++ 调用API获取当前时间
- C/C++ 进程/线程/模块遍历
- C/C++ 判断进程是否存在
- C/C++ 使用Socket模拟远程CMD
- C/C++ 实现正向CMDShell
- C/C++ 匿名管道反弹CMDShell
- GO 2,我们来了——2018/11/29
- Linux 逻辑卷LVM管理命令
- CentOS 7上源码构建git遇到的几个坑
- go中的fatal error:concurrent map read and map write
- 嵌入式Linux怎么搭建开发环境?
- go的并发小知识
- Linux Shell常用脚本整理