首页 > 解决方案 > 由于 unicode 字符,Powershell 脚本无法运行

问题描述

我有一个由于 unicode 字符而失败的 Powershell 脚本:

MyScript.ps1:

Write-Host "Installing 無書籤..."

当我从 Powershell 命令行运行此脚本时,出现以下错误:

在此处输入图像描述

我认为问题是 Powershell 以 ASCII 或其他一些非 unicode 模式运行。我试着像这样改变它:

$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8

但错误仍然存​​在。如何让 Powershell 运行我的脚本?

标签: powershellunicode

解决方案


屏幕截图暗示您正在使用Windows PowerShell,它将无 BOM *.ps1文件解释为ANSI编码(使用由旧系统区域设置确定的通常单字节 ANSI 代码页);相比之下,PowerShell [Core] v6+现在采用 UTF-8。

因此,要让Windows PowerShell正确解释 CJK 字符,您必须使用带有 BOM的Unicode编码来保存*.ps1文件;鉴于 PowerShell 源代码本身使用 ASCII 范围的字符(导致拉丁字符和 CJK 字符的混合),最好的选择是带有 BOM的 UTF-8


至于你尝试了什么:

$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8

这些设置仅在 PowerShell 与外部程序通信时适用- 请参阅此答案


推荐阅读