我在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

发表评论

电子邮件地址不会被公开。 必填项已用*标注