UTF8脚本在PowerShell中输出不正确的字符(UTF8 Script in PowerShe

2019-07-18 14:35发布

我创建了PowerShell中UTF8脚本非ASCII字符。

characters.ps1:

Write-Host "ç â ã á à"

当脚本在PowerShell控制台运行时,它输出错误的字符。

但是,如果我直接在控制台写入字符,它们将显示为预期:

没有人知道是什么原因导致这种行为?

这个问题从剧本我写谁也硬编码的路径,其中包括非ASCII字符arised。 当我试图传递给cmdlet的路径作为参数(在的情况下我要去ROBOCOPY一个文件夹),因为它无法找到路径(这是输出错误地在屏幕)的命令失败。

Answer 1:

更改脚本的编码设置为UTF-8 BOM解决的问题。

我用SublimeText与EncodingHelper插件控制字符集的脚本。 它被正确设置为UTF-8。

我改变在SublimeText脚本的编码“UTF-8与BOM”,输出被正确地显示。

我创建与记事本相同的脚本++,缺省为“UTF-8与BOM”,并且该字符串是在控制台正确显示。

我改变在记事本++脚本的编码“UTF-8无BOM”,它被错误地显示。

这似乎PowerShell中不能正确猜测的UTF-8文件的编码没有BOM。



Answer 2:

在我的情况下,问题是通过创建与Visual Studio代码新的PowerShell脚本具有UTF-8的默认编码造成的。 编码设置为“Windows 1252”解决了这个问题。

看来,PowerShell中不能处理UTF-8,它需要的“Windows 1252”编码。



Answer 3:

有检测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
ç â ã á à


Answer 4:

在调用脚本之前试试这个:

 $OutputEncoding = [Console]::OutputEncoding


文章来源: UTF8 Script in PowerShell outputs incorrect characters