我有一个程序,它使用一些哈希表来解析信息。我遇到了一些关于外国角色的奇怪问题。以下是准确的表述:
$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但这似乎并没有改变模式。坦率地说,我很惊讶控制台一开始就处理得这么好。但是,我不能理解这种不一致。最终,这些数据被写入AD属性,如果手动执行这些步骤,该属性再次工作正常,但如果我实际运行脚本,即使在前面提到的设置输出编码时,也会受到破坏。
我确实查看过this Q&A,但我似乎没有出现控制台显示问题,尽管这可能是真正类型字体的结果。也许他们是在掩盖问题。
有趣的是,如果我将VSCode转换为PowerShell 7.1,它似乎在PowerShell中正确工作。但是,由于与AD的集成(通过隐式会话兼容性不能很好地发挥作用),因此不可能在此项目中使用PowerShell核心。
Dev环境是最新的Windows2012R2。我不确定是否有能力像Win 10 (1909年)提到的那样更改系统代码页。
发布于 2021-03-19 02:36:15
这很难看,但是如果您在代码的末尾尝试这样做会发生什么呢:
$enc = [System.Text.Encoding]::UTF8
$enc.GetString($enc.GetBytes($(& $Expressions['E1'])))而且,这可能会帮助您Encode a string in UTF-8。
https://stackoverflow.com/questions/66701631
复制相似问题