【问题标题】:Wrong encoding in xml response on PowerShell Invoke-WebRequestPowerShell Invoke-WebRequest 上的 xml 响应中的错误编码
【发布时间】:2013-05-08 22:29:52
【问题描述】:

我正在使用 Invoke-WebRequest 检索 xml 文档。在 xml 声明中指定了 encoding="UTF-8"。当我在浏览器中查看文档时,它看起来是正确的。但是,当我在 PowerShell 中检索它并将其中的一些内容保存到数据库或将其打印到控制台时,编码出错并且“Joe's”变成了“Joeâs”。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element attribute="Joe's"></element>
</root>

脚本:

$response = Invoke-WebRequest -Uri "http://example.com/doc.xml"
$xml = [xml]$response.Content
$xml.root.element.attribute

输出:

Joeâs

这不应该有效吗?

【问题讨论】:

    标签: powershell-3.0


    【解决方案1】:

    我怀疑这可能不是编码问题。我尝试使用 139 种不同的编码进行转换,并且在 XML 中没有一个输出文件是正确的斯堪的纳维亚字符。我使用了这段代码:

    $outPath = "C:\Temp\"; 
    $result = Invoke-RestMethod -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) -Uri $url -Method Post;
    encodings = [System.Text.Encoding]::GetEncodings();
    
    foreach($item in $encodings) {
        $original = $result.OuterXml;
    
        $defaultEncoding = [System.Text.Encoding]::GetEncoding($item.name);
        $utf8Bytes = [System.Text.Encoding]::UTf8.GetBytes($original)
        $decoded = $defaultEncoding.GetString($utf8Bytes);
    
        $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False;
        [System.IO.File]::WriteAllLines(($outPath +$item.Name + ".xml"), $decoded , $Utf8NoBomEncoding)
    }
    

    当我在 Windows 中使用 curl 调用相同的 REST Api 时,我的编码没有问题,我得到的结果是 UTF-8。

    【讨论】:

      【解决方案2】:

      我在使用 [xml] 解析时遇到了类似的问题。我通过自己进行解析来解决它:

      $xml = New-Object xml
      $resolver = New-Object -TypeName System.Xml.XmlUrlResolver
      $resolver.Credentials = [System.Net.CredentialCache]::DefaultCredentials
      $reader = New-Object -TypeName System.Xml.XmlReaderSettings
      $reader.XmlResolver = $resolver
      $reader = [System.Xml.XmlReader]::Create($rssUrl, $reader)
      $xml.Load($reader)
      

      【讨论】:

        猜你喜欢
        • 2021-03-30
        • 1970-01-01
        • 2023-03-20
        • 2020-03-17
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多