我创建了PowerShell中UTF8脚本非ASCII字符。
characters.ps1:
Write-Host "ç â ã á à"
当脚本在PowerShell控制台运行时,它输出错误的字符。
但是,如果我直接在控制台写入字符,它们将显示为预期:
没有人知道是什么原因导致这种行为?
这个问题从剧本我写谁也硬编码的路径,其中包括非ASCII字符arised。 当我试图传递给cmdlet的路径作为参数(在的情况下我要去ROBOCOPY一个文件夹),因为它无法找到路径(这是输出错误地在屏幕)的命令失败。
更改脚本的编码设置为UTF-8 BOM解决的问题。
我用SublimeText与EncodingHelper插件控制字符集的脚本。 它被正确设置为UTF-8。
我改变在SublimeText脚本的编码“UTF-8与BOM”,输出被正确地显示。
我创建与记事本相同的脚本++,缺省为“UTF-8与BOM”,并且该字符串是在控制台正确显示。
我改变在记事本++脚本的编码“UTF-8无BOM”,它被错误地显示。
这似乎PowerShell中不能正确猜测的UTF-8文件的编码没有BOM。
在我的情况下,问题是通过创建与Visual Studio代码新的PowerShell脚本具有UTF-8的默认编码造成的。 编码设置为“Windows 1252”解决了这个问题。
看来,PowerShell中不能处理UTF-8,它需要的“Windows 1252”编码。
有检测utf8nobom(一个可靠的方法https://unicodebook.readthedocs.io/guess_encoding.html )。 像很多其他的小东西,这似乎是在PS 6连我心爱的emacs 25更好地为窗口得到的编码是错误的。
PS C:\users\admin> pwsh
PowerShell 6.1.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/pscore6-docs
Type 'help' to get help.
PS C:\users\admin> "write-host 'ç â ã á à'" | set-content -Encoding utf8NoBOM accent.ps1
PS C:\users\admin> .\accent
ç â ã á à
在调用脚本之前试试这个:
$OutputEncoding = [Console]::OutputEncoding