PowerShell存储winget upgrade命令响应到变量时出现编码问题
我花了近一个小时排查问题,始终没有找到根因,也没能摸索出可行的解决方案。
当我运行winget upgrade命令时,返回的数据编码完全正常:
但如果我将winget upgrade的返回结果存储到变量中($winget = winget upgrade; $winget;),部分字符就会出现乱码,看起来是编码问题导致的:
这类cmdlet返回给PowerShell的始终是字符串,我猜测将响应赋值给变量时应用了PowerShell配置文件中的默认文本编码?我尝试给变量转换大多数常见编码,结果直接导致数据完全损坏。
我甚至尝试用所有可能的编码类型导出数据,结果全部出现乱码:
winget upgrade | Out-File -FilePath C:\tmp\test1.txt -Encoding ascii winget upgrade | Out-File -FilePath C:\tmp\test3.txt -Encoding default winget upgrade | Out-File -FilePath C:\tmp\test4.txt -Encoding string winget upgrade | Out-File -FilePath C:\tmp\test5.txt -Encoding unicode winget upgrade | Out-File -FilePath C:\tmp\test7.txt -Encoding utf32 winget upgrade | Out-File -FilePath C:\tmp\test8.txt -Encoding utf7 winget upgrade | Out-File -FilePath C:\tmp\test9.txt -Encoding utf8
我尝试通过重新编码字符串调整乱码字符,但仍未解决问题:
$originalBytes = [Text.Encoding]::Default.GetBytes('Microsoft Visual C++ 2013 Redistributable (x6') [Text.Encoding]::Utf8.GetString($originalBytes)

内容的提问来源于stack exchange,提问作者Arbiter
相关产品推荐
相关产品推荐

