我正在通过API解析某些XML文本而不保存实际文件,当文本包含其他语言的字符时遇到了问题。
当尝试转换'ë'或类似的其他字符时,我最终得到文本é。由于我没有使用任何文件,有没有办法更改内存中变量的编码。
任何帮助将不胜感激。
答案 0 :(得分:6)
当文本转换为.NET字符串时,原始文本的字符编码似乎被误解了。
具体来说,它看起来像是将UTF-8编码的文本误解为“ ANSI”编码,或者在诸如Invoke-WebRequest
之类的cmdlet上下文中,被解释为类似的固定宽度单字节编码例如ISO-8859-1 ,这样即使UTF-8将非ASCII范围的字符编码为UTF-8输入,每个每个字节本身也是一个字符。 多个字节。
要解决此问题,您必须重新编码字符串:
使用输入字符串的错误应用的编码将误解的字符串转换回字节,以获得原始的字节表示形式。
然后使用 true 编码(即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”编码,请参阅this answer。