在Windows10以前,我们编写批处理的时候,基本上是现写现用,echo显示中文完全没问题,但如下图,新建一个文本文档写这么一段批处理代码,运行的时候显示的中文就是乱码, Win10之前完全没有这个问题,是什么导致的这个问题呢。
有一点非常重要,当出现乱码的时候,第一时间应该想到编码错误的问题,现在Unicode普及早已是大势所趋,Linux一直采用的是utf-8编码,微软一直坚持的ansi也开始动摇了,但从长期的习惯上来说,一次改成utf-8代价高,体验度可能也差,因此微软逐步开始将Windows的部分功能改成utf-8,逐渐的完全从ansi过渡到utf-8.
因此在这个问题上,cmd和powershell的编码仍然是ansi,但新建的文本文档已经从之前默认的ansi变成了utf-8,从上图的右下角你可以看出来,文件是utf-8,用ansi去解码,必将导致非ASCII码显示成乱码。
那么问题该怎么解决呢?既然知道了原理,我们只需要保证cmd/powershell和文本文件的编码相同即可,办法有2种,另存为文本文件,选择编码为ansi;另一种是把cmd/powershell编码改成utf-8,utf-8的活动代码页是65001,执行下列命令,我们再试