我正在使用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
这应该不起作用吗?
答案 0 :(得分:0)
我怀疑这可能不是编码问题。我尝试使用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。
答案 1 :(得分:0)
我在使用 [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)