【发布时间】:2021-03-19 02:11:27
【问题描述】:
我有一个程序,它使用几个哈希表来解析信息。我对外国角色有一些奇怪的问题。下面是一个准确的表示:
$Props =
@{
P1 = 'Norte Americano e Inglês'
}
$Expressions =
@{
E1 = { $Props['P1'] }
}
& $Expressions['E1']
如果我将其粘贴到 PowerShell 5.1 控制台或在 VSCode 中运行选择,我会得到:
Norte Americano e Inglês
正如预期的那样。但是如果我在 VSCose 中运行代码(按 F5)。我明白了:
Norte Americano e Inglês
通过调试,在散列文字后设置断点,我可以知道不正确的版本实际上是在散列中。所以这不是调用运算符或使用脚本块的副作用。
我尝试将输出编码设置为:
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
但这似乎并没有改变模式。坦率地说,我很惊讶控制台一开始就能很好地处理 Unicode。但是,我无法理解这种不一致。最终,这些数据被写入一个 AD 属性,如果我手动执行这些步骤,该属性仍然可以正常工作,但如果我实际运行脚本,即使输出编码设置为前面提到的,也会被破坏。
我确实查看了this Q&A,但我似乎没有遇到控制台显示问题,尽管这可能是真实类型字体的结果。也许他们在掩盖问题。
有趣的是,如果我将它切换到 PowerShell 7.1,它似乎在 VSCode 中可以正常工作。但是,由于与 AD cmdlet 的集成,通过隐式会话兼容性无法很好地运行,因此无法在此项目中使用 PowerShell Core。
开发环境是最新的 Windows 2012R2。我不确定是否可以更改 Win 10 (1909) 中提到的系统代码页。
【问题讨论】:
-
由于源代码中的字符串文字出现问题,最可能的解释是你的脚本文件被PowerShell误解了,如果脚本保存为 UTF-8没有 BOM,就会发生这种情况。尝试将脚本保存为 UTF-8 with BOM;请参阅this answer 了解更多信息。
标签: powershell