Tox*_*eke 3 powershell encoding character-encoding
我正在通过API解析一些XML文本而不保存实际文件,并且当文本包含来自其他语言的字符时遇到问题.
当试图转换'ë'或其他类似的东西时,我最终得到了文本é.有没有办法在内存中更改变量的编码,因为我没有使用任何文件.
任何帮助将不胜感激.
当文本转换为.NET字符串时,看起来原始文本的字符编码被误解了.
具体来说,看起来UTF-8编码的文本被误解为"ANSI"编码,或者在cmdlet的上下文中,例如Invoke-WebRequest,作为类似的固定宽度单字节编码,如ISO-8859-1,所以每个尽管UTF-8编码具有多个字节的非ASCII范围字符,但UTF-8输入中的字节本身也成为一个字符.
要解决此问题,您必须重新编码字符串:
使用输入字符串错误应用的编码将错误解释的字符串转换回字节,以便获得原始字节表示.
然后使用真正的编码将这些字节重新转换回字符串,即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)
Run Code Online (Sandbox Code Playgroud)
以上收益率é.
在Windows PowerShell中,[Text.Encoding]::Default是您的系统的"ANSI"编码; 对于ISO-8859-1编码,请使用[Text.Encoding]::GetEncoding(28591)
请注意,整个问题不会出现在PowerShell Core中,它始终默认为(无BOM)UTF-8.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |