当需要查看的文本文件或执行的批处理脚本有中文时,在cmd或powershell直接运行会乱码。
cmd 可以输入chcp 65001
切换成 utf-8 代码页来解决,但 powershell 不行,看上去操作成功了,但实际执行还是乱码。
有一种解释是(参考):
chcp是源于cmd的命令,用于改变代码页CodePage,PowerShell中也可使用,但需在启动PowerShell时使用才有效,因为 .net会缓存启动时的代码页,在PowerShell会话中再使用chcp改变代码页会被忽略。
解决办法有几种:
1(不建议,会导致gbk编码反而乱码)
修改控制面板的设置,选择 UTF-8 提供全球语言支持
2(试了不行)
修改Microsoft.PowerShell_profile.ps1
文件,文件位置可以用echo $PROFILE
查看,加入下面一行
[System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
或者这个:
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
3
修改文本文件或脚本文件编码,改为utf-8 bom
,然后正常操作
4
在命令后加上-Encoding utf8
,比如:
Get-Content .\all.log -Tail 20 -wait -Encoding utf8
type .\utf.txt -Encoding utf8
这种方法只能查看文本文件,执行脚本文件不行
5(试了不行)
在CMD或PowerShell中运行:
powershell -NoExit -Command "chcp 65001"
或者加到启动参数的后面,比如快捷方式、注册表、“Terminal终端”的设置,都可以