本文也在博主个人网站:https://www.curious.host/
中文互联网上一般搜素到的解决方案都是切换编码页。
但编码页不是Winodws PowerShell对中文字符乱码的真正原因。因为编码页只是针对不支持Unicode的程序采用的默认编码,按理说你的UTF8脚本不应该会采用这个编码页来读取。
实际问题出在Winodws PowerShell对UTF8的判断上,UTF-8标准形式是不带BOM的,但Windows下要带,Windows默认使用BOM来区分Unicode和非Unicode编码,对非Unicode就会使用程序指定的ANSI编码页来解读,而Unicode则会使用另一套称为宽字符的方法。程序的ANSI编码页一般都是默认跟随系统的缺省编码页,你安装系统的语言区域默认的版本。这一套全球语言支持的方法在今天看起来是造成了很多不必要问题,但它成型太早了,那个时候很多相关的讨论还没有结果。
所以WinPS和CMD对UTF8文件的中文乱码,是因为它没有正确的识别这是一个UNICODE编码文件。如果你把脚本重新保存为带BOM的UTF8编码,脚本里的中文就能正确ECHO了。具体查看参考文档。实验参考下面的图片:
标准UTF-8编码