【问题标题】:PowerShell RSS Feed Encoding (UTF-8 | ISO-8859-1) problematicPowerShell RSS 提要编码 (UTF-8 | ISO-8859-1) 有问题
【发布时间】:2019-09-11 12:12:40
【问题描述】:

我正在尝试通过PowerShell 下载和解析rss feed

Invoke-WebRequest -Uri 'https://example.com/rss.php' -OutFile $file -UseBasicParsing -Headers @{"Content-Type"="text/html"; "charset"="utf-8"}

您可以在下面看到编码错误的响应/下载。

  • <description>Foo übermitteln</description> 应该是 Foo übermitteln
  • <description>Größe<br></description> 应该是 Größe
<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0"> 
    <channel> 
        <title>Foo RSS-Feed</title> 
        <link>https://example.com</link> 
        <description>Foo übermitteln</description> 
        <language>de-de</language> 
        <copyright>Copyright 2019 Example.com</copyright> 

        <item> 
            <title>Lorem Ipsum</title>
            <link>https://example.com/details.php?id=1234&amp;hit=1</link> 
            <guid>1234</guid> 
            <category>Foo</category> 
            <pubDate>2019-08-09 10:12:49</pubDate> 
            <description>Gr&ouml;&#223;e<br></description>
        </item> 
    </channel>
</rss>

任何人都可以给我一个提示,我可以如何成功地对响应进行编码/解码并将其解析为xml


实际上,我使用以下代码手动编码流:

$rssResponse = Invoke-WebRequest -UseBasicParsing -Method Get -Headers $defaultHeaders -Uri $uri
$rss = [System.Text.Encoding]::UTF8.GetString($rssResponse.RawContentStream.ToArray())

回复:

<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0"> 
    <channel> 
        <title>Foo RSS-Feed</title> 
        <link>https://example.com</link> 
        <description>Foo übermitteln</description> 
        <language>de-de</language> 
        <copyright>Copyright 2019 Example.com</copyright> 

        <item> 
            <title>Lorem Ipsum</title>
            <link>https://example.com/details.php?id=1234&amp;hit=1</link> 
            <guid>1234</guid> 
            <category>Foo</category> 
            <pubDate>2019-08-09 10:12:49</pubDate> 
            <description>Gr&ouml;&#223;e<br></description>
        </item> 
    </channel>
</rss>

但是还是有问题.. ??????

【问题讨论】:

  • 如果你这样做@{"Content-Type"="text/html"; "charset"=" ISO-8859-1"会发生什么?
  • 同样的结果。如果我更改字符集也没关系。我添加了更多信息。

标签: powershell encoding rss


【解决方案1】:

必须有一种更简单的方法,但鉴于您更新的代码几乎可以提供想要的结果,您只需将 HTML 实体转换为普通文本。

应该这样做:

Add-Type -AssemblyName System.Web

$rssResponse = Invoke-WebRequest -UseBasicParsing -Method Get -Headers $defaultHeaders -Uri $uri
$rss = [System.Web.HttpUtility]::HtmlDecode([System.Text.Encoding]::UTF8.GetString($rssResponse.RawContentStream.ToArray()))

输出:

<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0"> 
    <channel> 
        <title>Foo RSS-Feed</title> 
        <link>https://example.com</link> 
        <description>Foo übermitteln</description> 
        <language>de-de</language> 
        <copyright>Copyright 2019 Example.com</copyright> 

        <item> 
            <title>Lorem Ipsum</title>
            <link>https://example.com/details.php?id=1234&hit=1</link> 
            <guid>1234</guid> 
            <category>Foo</category> 
            <pubDate>2019-08-09 10:12:49</pubDate> 
            <description>Größe<br></description>
        </item> 
    </channel>
</rss>

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 2012-09-04
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多