如何解决读取提要的编码问题



https://sports.ultraplay.net/sportsxml?clientKey=b4dde172-4e11-43e4-b290-abdeb0fd711&sportId=1165

我正试图在.NET环境中读取此源并获取BOM问题(System.Xml.XmlException:"没有Unicode字节顺序标记。无法切换到Unicode。"(。如何解决此问题?是因为xml内容没有xml声明标记吗?

我试着用所有可能的方式阅读提要,让我们举一个例子:

XmlReader reader = XmlReader.Create(feedUrl);
var content = XDocument.Load(reader);

显然,XML声明似乎在这里抛出了一些东西:

<?xml version="1.0" encoding="utf-16"?>

请参阅:使用XDocument 加载编码为UTF16的xml

这个问题解决了当您有一个使用StreamReader的XML文件时的场景。由于您是从web下载文件,因此可以使用OpenRead()方法将WebClient调整为StreamReader,如下所示:

string feedUrl = "https://sports.ultraplay.net/sportsxml?clientKey=b4dde172-4e11-43e4-b290-abdeb0ffd711&sportId=1165";
System.Xml.Linq.XDocument content;
using (System.Net.WebClient webClient = new System.Net.WebClient())
using (System.IO.Stream stream = webClient.OpenRead(feedUrl))
using (System.IO.StreamReader streamReader = new System.IO.StreamReader(stream, Encoding.UTF8))
{
content = XDocument.Load(streamReader);
}
Console.WriteLine(content);

奇怪的是,虽然文档声称是UTF-16,但HTTP响应显示UTF-8,这就是我在StreamReader构造函数中指定UTF-8的原因。

HTTP/1.1 200 OK
Date: Fri, 02 Nov 2018 16:28:46 GMT
Content-Type: application/xml; charset=utf-8

这似乎很有效:(

相关内容

  • 没有找到相关文章

最新更新