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

时间:2018-11-01 20:30:48

标签: c# .net web-services encoding feed

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

我正在尝试在.NET环境中阅读此提要,并遇到BOM表问题(System.Xml.XmlException:'没有Unicode字节顺序标记。无法切换到Unicode。)。我该如何解决?是因为xml内容没有xml声明标签吗?

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

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

1 个答案:

答案 0 :(得分:2)

显然,XML声明似乎在这里丢了东西:

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

请参阅:Loading xml with encoding UTF 16 using XDocument

当您使用StreamReader拥有XML文件时,该问题解决了这种情况。由于您是从网络上下载文件,因此可以使用WebClient方法将StreamReader修改为OpenRead(),如下所示:

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构造函数中指定了这一点。

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

这似乎很好用:)