PowerShell 5非交互模式下阿拉伯文本乱码问题求助
PowerShell 5非交互模式下阿拉伯文本乱码问题
问题现象
- 交互模式下,将以下脚本粘贴到PowerShell 5控制台,阿拉伯文本可正常识别并显示:
$Text = 'مرحبا يا عالم' $TextR = -Join ($Text.ToCharArray() | Sort {(--$script:i)}) $Text; $TextR; sleep 5
输出结果:
ملاع اي ابحرم مرحبا يا عالم
- 非交互模式下(直接运行脚本文件),文本显示为乱码:
Ù…Ø±ØØ¨Ø§ يا عالم …Ù„Ù§Ø¹Ø §ØŠÙ §Ø¨ØØ±Ø…Ù
原因分析
PowerShell 5非交互模式默认采用系统ANSI编码读取脚本文件,若脚本以无BOM的UTF-8格式保存,阿拉伯文本会因编码不匹配被错误解析,最终显示乱码。而交互模式下粘贴的内容直接沿用控制台当前编码(通常已配置支持UTF-8或Unicode),因此能正常显示。
解决方案
1. 以UTF-8带BOM格式保存脚本
将脚本文件保存为UTF-8 with BOM格式(VS Code、Notepad++等主流编辑器均支持该选项)。PowerShell 5会优先识别带BOM的UTF-8编码,确保阿拉伯文本被正确解析。这是最推荐的方案,学生只需按此格式保存脚本即可正常运行。
2. 执行脚本时指定编码读取
通过Get-Content指定UTF-8编码读取脚本,再用Invoke-Expression执行:
Invoke-Expression (Get-Content -Path .\your-script.ps1 -Encoding UTF8)
3. 配置PowerShell默认编码为UTF-8
修改PowerShell的控制台输出编码和文件读取默认编码,统一为UTF-8:
# 设置控制台输出编码为UTF-8 [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() # 设置Get-Content默认编码为UTF-8 $PSDefaultParameterValues['Get-Content:Encoding'] = 'UTF8'
将上述代码添加到PowerShell配置文件($PROFILE)中,可让设置永久生效。
4. 以Unicode(UTF-16 LE)格式保存脚本
将脚本保存为**Unicode(UTF-16 LE)**格式,PowerShell 5对带BOM的Unicode编码兼容性良好,也能正确解析阿拉伯文本。
内容的提问来源于stack exchange,提问作者Oprex Droid
相关产品推荐
相关产品推荐

