内存中的 Powershell 编码问题

标签 powershell encoding character-encoding

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

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

如有任何帮助,我们将不胜感激。

最佳答案

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

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

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

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

  • 然后使用 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 中,它始终默认为(无 BOM)UTF-8
如果您发现自己甚至在 PowerShell Core 中也需要使用“ANSI”编码,请参阅 this answer .

关于内存中的 Powershell 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071711/

相关文章:

windows - 创建将使用动态 %username% 的快捷方式

java - 一种封装java应用程序的方法

css - Lato 中未显示箭头

php - 无法显示德语变音符号

字体和字符编码

powershell - 检索已授权通过Powershell中的防火墙的软件

powershell - 如何在 powershell 中使用 get-process 结果填充数组

encoding - SMPP中 "data_coding"字段的含义

r - 本地运行的应用程序在部署到 Shinyapps 服务器时遇到错误

javascript - AJAX 窗口无法使用西里尔字母 - 为什么?