powershell - 由于 unicode 字符,Powershell 脚本无法运行
问题描述
我有一个由于 unicode 字符而失败的 Powershell 脚本:
MyScript.ps1:
Write-Host "Installing 無書籤..."
当我从 Powershell 命令行运行此脚本时,出现以下错误:
我认为问题是 Powershell 以 ASCII 或其他一些非 unicode 模式运行。我试着像这样改变它:
$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
但错误仍然存在。如何让 Powershell 运行我的脚本?
解决方案
屏幕截图暗示您正在使用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 与外部程序通信时适用- 请参阅此答案。
推荐阅读
- python - 如何在 NLTK Matplotlib 函数中设置多行的颜色?
- reactjs - Recharts 不适用于带有 typescript 的 React
- scala - Scala如何在endsWith上使用正则表达式?
- reactjs - 即使 url 触发器没有改变,点击后运行 useEffect
- clojure - 试图在 Clojure 中创建一个空集
- c++ - 一一搭建CGAL Mesh_criteria
- scala - 铸造问题
- python - ttk notebook 帧数过多导致故障
- javascript - 为什么我的客户没有听到套接字 io 事件?
- ajax - 为什么来自 Ajax w XMLHttpRequest 的数据没有到达指定的 div id