Powershell 3.0 PowerShell Invoke WebRequest上的xml响应编码错误

Powershell 3.0 PowerShell Invoke WebRequest上的xml响应编码错误,powershell-3.0,Powershell 3.0,我正在使用Invoke WebRequest检索xml文档。在xml声明中,指定了encoding=“UTF-8”。当我在浏览器中查看文档时,它看起来是正确的。但当我在PowerShell中检索它并将其中的一些内容保存到DB或打印到控制台时,编码会出错,“Joe’s”变成“Joe’s” XML: <?xml version="1.0" encoding="UTF-8"?> <root> <element attribute="Joe's"></e

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

XML:

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

Joeâs

这不应该奏效吗?

我怀疑这可能不是编码问题。我试着使用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。

我在使用
[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)
$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)