rss feed输出中的错误字符

时间:2015-02-24 07:30:34

标签: c# asp.net rss

我使用以下方法连接到RSS Feed。

var url = "http://blogs.mysite.com/feed/";
var sourceXmlFeed = "";

using (var wc = new WebClient())
{
    wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
    sourceXmlFeed = wc.DownloadString(url);
}

var xrs = new XmlReaderSettings();
xrs.CheckCharacters = false;

var xtr = new XmlTextReader(new System.IO.StringReader(sourceXmlFeed));

var xmlReader = XmlReader.Create(xtr, xrs);

SyndicationFeed feed = SyndicationFeed.Load(xmlReader);

但是我在输出中遇到了坏字符(如下所示),我认为它与编码有关。

例如。 2015年,我们正在为黄金做准备?

任何人都知道如何解决这个问题?

顺便说一下,我这样做是因为我无法使用更直接的方法(如下所示)而不会导致远程服务器返回错误:(443)。

var xmlReader = XmlReader.Create("http://blogs.mysite.com/feed);
SyndicationFeed feed = SyndicationFeed.Load(xmlReader);

1 个答案:

答案 0 :(得分:0)

编码问题是由于将xml读取为字符串引起的,因为XML中的编码检测与字符串中的编码检测不同。

WebClient webClient = null;
XmlReader xmlReader = null;

try
{
   webClient = new WebClient();
   webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");

   xmlReader = XmlReader.Create(webClient.OpenRead(url));

   // Read XML here because in a finaly block the response stream and the reader will be closed.
}
finally
{
   if (webClient != null)
   { webClient.Dispose(); }

   if (xmlReader != null)
   { xmlReader .Dispose(); }
}