我有一个rssReader在一些rss feed上正常工作,但我得到了一个我特别的丹麦字符有一些问题 - 编码我期望。
我在这个url的原始Http响应中看到了这个编码: http://www.sydvestjyllandsefterskole.dk/rss
Content-Type: text/xml; Charset=UTF-8
<?xml version="1.0" encoding="iso-8859-1" ?>
尝试了这两种编码和其他编码,但似乎没有任何效果。
我做了一个单元测试来显示问题和我尝试过的东西:( NUnit)
public IEnumerable<TestCaseData> RssItemEncodingTestCases
{
get
{
yield return new TestCaseData("http://www.sydvestjyllandsefterskole.dk/rss", "Stort fremmøde til dejlig familiedag.", new ASCIIEncoding());
yield return new TestCaseData("http://www.sydvestjyllandsefterskole.dk/rss", "Stort fremmøde til dejlig familiedag.", new UTF8Encoding());
yield return new TestCaseData("http://www.sydvestjyllandsefterskole.dk/rss", "Stort fremmøde til dejlig familiedag.", new UnicodeEncoding());
yield return new TestCaseData("http://www.sydvestjyllandsefterskole.dk/rss", "Stort fremmøde til dejlig familiedag.", Encoding.GetEncoding("ISO-8859-1"));
}
}
[TestCaseSource("RssItemEncodingTestCases")]
public void TestEncoding(string url, string expectedToStartWith, Encoding encoding)
{
var description = Read(url, encoding);
Assert.That(description, Is.StringStarting(expectedToStartWith));
}
public string Read(string url, Encoding encoding = null)
{
var client = new WebClient();
if (encoding != null)
client.Encoding = encoding;
try
{
using (XmlReader reader = new XmlTextReader(client.OpenRead(url)))
{
while (reader.Read())
{
if (reader.IsStartElement() & reader.Name == "item")
{
while (reader.Read())
{
switch (reader.Name)
{
case "description":
return reader.ReadElementContentAsString();
}
if (reader.Name == "item" & reader.NodeType == XmlNodeType.EndElement)
break;
}
}
}
}
}
catch
{
}
return null;
}
预期:字符串以“Stortfremmødetildejlig familiedag”开头。 但是:“Stortfremmødetildejlig familiedag。
知道如何正确解码?
答案 0 :(得分:0)
通过将RSS源的编码更改为utf-8来修复它:
<?xml version="1.0" encoding="utf-8" ?>