首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell Unicode字符意外转换

PowerShell Unicode字符意外转换
EN

Stack Overflow用户
提问于 2021-03-19 02:11:27
回答 1查看 203关注 0票数 0

我有一个程序,它使用一些哈希表来解析信息。我遇到了一些关于外国角色的奇怪问题。以下是准确的表述:

代码语言:javascript
复制
$Props =
@{
    P1  = 'Norte Americano e Inglês'
}

$Expressions =
@{
    E1  = { $Props['P1'] }
}

& $Expressions['E1']

如果将其粘贴到PowerShell 5.1控制台或在VSCode中运行选择,则会得到:

代码语言:javascript
复制
Norte Americano e Inglês

不出所料。但是如果我在VSCose中运行代码(点击F5)。我得到:

代码语言:javascript
复制
Norte Americano e Inglês

通过调试,在散列文本之后设置一个断点,我可以判断不正确的版本实际上在散列中。因此,这并不是调用操作符或脚本块使用的副作用。

我试图设置输出编码如下:

代码语言:javascript
复制
$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年)提到的那样更改系统代码页。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-19 02:36:15

这很难看,但是如果您在代码的末尾尝试这样做会发生什么呢:

代码语言:javascript
复制
$enc = [System.Text.Encoding]::UTF8
$enc.GetString($enc.GetBytes($(& $Expressions['E1'])))

而且,这可能会帮助您Encode a string in UTF-8

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66701631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档