Как решить проблему кодировки при чтении фида - PullRequest
0 голосов
/ 01 ноября 2018

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

Я пытаюсь прочитать этот канал в среде .NET и получить ошибку спецификации (System.Xml.XmlException: «Нет метки порядка следования байтов в Юникоде. Не удается переключиться в Юникод.). Как я могу решить это? Это потому, что у содержимого xml нет тега объявления xml?

Я попытался прочитать ленту всех возможных способов, давайте приведем в качестве примера:

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

1 Ответ

0 голосов
/ 01 ноября 2018

Очевидно, что XML-декларация, кажется, отбрасывает вещи сюда:

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

См .: Загрузка XML с кодировкой UTF 16 с использованием XDocument

Этот вопрос касается сценария, когда у вас есть XML-файл с использованием StreamReader. Поскольку вы загружаете файл из Интернета, вы можете адаптировать 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

Кажется, это хорошо работает:)

...