内存中的Powershell编码问题

有毒的阿扑克

我正在通过API解析一些XML文本而不保存实际文件,并且当文本包含其他语言的字符时遇到了问题。

当尝试转换“ë”或类似的其他内容时,我最终得到文本“©”。有没有一种方法可以更改内存中变量的编码,因为我没有使用任何文件。

任何帮助将不胜感激。

mklement0

当文本转换为.NET字符串时,原始文本的字符编码似乎被误解了。

具体来说,看起来UTF-8编码的文本被误解为“ ANSI”编码,或者在诸如cmdlet的上下文中被误解为Invoke-WebRequest类似于固定宽度的单字节编码,例如ISO-8859-1,因此每个即使UTF-8将非ASCII范围的字符编码为多个字节,UTF-8输入中的byte本身也变成了字符

要更正此问题,您必须重新编码字符串

  • 使用输入字符串的错误应用的编码将误解的字符串转换回字节,从而获得原始的字节表示形式。

  • 然后使用真正的编码(即UTF-8)将这些字节转换回字符串

# Note: Works in Windows PowerShell only - in PowerShell Core,
# [Text.Encoding]::Default is *invariably* UTF-8.
$originalBytes = [Text.Encoding]::Default.GetBytes('é')
[Text.Encoding]::Utf8.GetString($originalBytes)

以上产量é

在Windows PowerShell中,[Text.Encoding]::Default是系统的“ ANSI”编码。对于ISO-8859-1编码,请使用[Text.Encoding]::GetEncoding(28591)

请注意,PowerShell Core不会完全出现整个问题,PowerShell Core始终默认为(无BOM)UTF-8
如果您发现自己甚至在PowerShell Core中也需要使用“ ANSI”编码,请参见此答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章