阅读iso-8859-1 RSS订阅C#WP7
我想读取使用iso-8859-1编码的rss订阅源。阅读iso-8859-1 RSS订阅C#WP7
我可以得到所有元素的罚款,问题是当我把它放在一个文本块,它不会显示所有字符。我不确定我做错了什么。我已经尝试了一些我在谷歌上找到的解决方案,但这对我并不适用。我必须错过一些东西......这也是我第一次真正使用utf-16以外的其他工具。我以前从来不需要转换任何东西。
该应用程序的工作原理如下I downloadstring async(WebClient)。所以当这被称为我得到一个字符串包含完整的RSS饲料。
我试着得到的字节,然后encoding.convert ..但我必须缺少的东西。
像这样的一个样本
WebClient RSS = new WebClient();
RSS.Encoding = Encoding.GetEncoding("ISO-8859-1");
RSS.DownloadStringCompleted += new DownloadStringCompletedEventHandler(RSS_DSC);
RSS.DownloadStringAsync(new Uri("some rss feed"));
public void RSS_DSC(object sender, DownloadStringCompletedEventArgs args)
{
_xml = XElement.Parse(args.Result);
foreach(XElement item in _xml.Elements("channel").Elements("item"))
{
feeditem.title = item.Element("title").Value;
// + all other items
}
}
我已经试过这藏汉
private void RSS_ORC(object sender, OpenReadCompletedEventArgs args)
{
Encoding e = Encoding.GetEncoding("ISO-8859-1");
Stream ez = args.Result;
StreamReader rdr = new StreamReader(ez, e);
XElement _xml = _xml = XElement.Parse(rdr.ReadToEnd());
feedlist = new List<Code.NewsItem>();
XNamespace dc = "http://purl.org/dc/elements/1.1/";
foreach (XElement item in _xml.Elements("channel").Elements("item"))
{
Code.NewsItem feeditem = new Code.NewsItem();
feeditem.title = item.Element("title").Value;
feeditem.description = item.Element("description").Value;
feeditem.pubdate = item.Element("pubDate").Value;
feeditem.author = item.Element(dc + "creator").Value;
feedlist.Add(feeditem);
}
listBox1.ItemsSource = feedlist;
}
虽然标题中包含未显示任何良好的字符。喜欢..我可以得到编码部分工作。而不是有这些字符:带问号的方格,问号或单方格。
不要误会我我是一个总的初学者。但是发布在网上的解决方案并不能为我解决问题。
请注意,我删除了编码部分,因为它不工作:/ 如果有人能够帮助我,这将是惊人的。
可以调用client.DownloadStringAsync
之前通过设置编码指定编码:
webClient.Encoding = Encoding.GetEncoding("iso-8859-1")
在您的代码示例,你不要在任何地方创建XML文档。是否缺少一些代码?你应该像初始化:
var xml = XDocument.Load((string)args.Result);
Windows Phone 7和Silverlight不支持其他的编码如ISO-8859-1,他们只支持ASCII和Unicode编码器。对于其他任何您需要使用OpenReadAsync
来获取字节流,然后应用您自己的编码实现。
这个blog可能会有助于你创建一个。
我会发誓我遇到了MSDN上的文章,它被支持。至少它带有wp7标志。但因为我找不到它了,我会按照你的建议去阅读那个博客。如果能解决问题,我会通知你! – helpme 2011-06-13 12:38:07
@helpme:查看我对@ jgauffin的答案的最新评论。 – AnthonyWJones 2011-06-14 07:56:41
ISO-8859-1绝对支持WP7。它是唯一一个ISO-8859- *编码。我使用XmlReader来反序列化RSS流,并且UTF- *和ISO-8859-1是该类唯一支持的编码(windows- *和ISO-8859-2及以上版本在XmlReader c'tor中引发异常)。
尝试使用这样一个XmlReader(没有指定编码):
using (XmlReader reader = XmlReader.Create(stream))
{
...
}
的的XmlReader将从流中的XML声明得到的编码。
显示字符的上半部分(高于0x80)可能仍然存在问题。我在给我吃(我的WP7应用程序)这个问题,并用这个小黑客来解决的事情了:
public static string EncodeHtml(string text)
{
if (text == null) return string.Empty;
StringBuilder decodedText = new StringBuilder();
foreach (char value in text)
{
int i = (int)value;
if (i > 127)
{
decodedText.Append(string.Format("&#{0};", i));
}
else
{
decodedText.Append(value);
}
}
return decodedText.ToString();
}
它只能在过程中的WebBrowser控件,但是这是我见过的唯一的地方显示不正确。
希望这有助于 Calum
需要到RSS XML解码时,这为我工作。这是通用足以使这将支持.NET
WebClient wcRSSFeeds = new WebClient();
String rssContent;
// Support for international chars
Encoding encoding = wcRSSFeeds.Encoding;
if (encoding != null)
{
encoding = Encoding.GetEncoding(encoding.BodyName);
}
else
{
encoding = Encoding.UTF8; // set to standard if none given
}
Stream stRSSFeeds = wcRSSFeeds.OpenRead(feedURL); // feedURL is a string eg, "http://blah.com"
using (StreamReader srRSSFeeds = new StreamReader(stRSSFeeds, encoding, false))
{
rssContent = srRSSFeeds.ReadToEnd();
}
如果有帮助支持的所有加密类型,你可以使用:
var myString = HttpUtility.HtmlDecode(feeditem.description);
这样每一个特殊字符将解码,就可以显示myString
正确
对不起,我遗漏了一些代码。我确实指定了编码。而对于XML我这样做这样 XElement _xml; _xml = XElement.Parse(args.Result); – helpme 2011-06-13 12:16:47
1.用完整的代码更新你的问题。 2.你确定返回的字符串是iso8559-1吗? – jgauffin 2011-06-13 12:22:27
那么它在rss源文件中指定。所以我想是这样? – helpme 2011-06-13 12:28:17