Почему результаты DownloadStringAsync имеют странные символы, а результаты XmlReader - нет? - PullRequest
1 голос
/ 02 июля 2010

Я использую RSS-канал в качестве источника данных. Я настроил способ получения данных для использования метода WebClient.DownloadStringAsync. До этого я использовал метод XmlReader.Create. Затем я использую результаты в качестве источника данных для привязки к TextBlock в WPF.

Поскольку я внес изменения при отображении результатов, все специальные закодированные символы отображаются как нечетные символы. Хотелось бы помочь, убедившись, что я сохранил правильную кодировку, чтобы мои отображаемые значения не имели нечетных символов.

// WebClient code...    
private void GetFeed(int i)
            {
                Uri _feedUri = new Uri(_feedList[i]); 
                webClient = new WebClient();
                webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(stringStringCompletedEvent);
                webClient.DownloadStringAsync(_feedUri, _feedTokenList[i]);
            }
private void stringStringCompletedEvent(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {

                string xmlString = e.Result;
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xmlString);
                doc.Save(@"C:\CashierData\msnbc-top.xml");
            }
        }

Вот мой предыдущий код, использующий XmlReader для загрузки и анализа канала.

XmlReader reader = XmlReader.Create(feed, settings);

1 Ответ

2 голосов
/ 02 июля 2010

Я подозреваю, что проблема в том, что веб-сервер неправильно указывает кодировку контента.

Вы можете использовать DownloadDataAsync вместо этого, а затем использовать

doc.Load(new MemoryStream(data));

(где data - байтовый массив). Затем синтаксический анализатор XML автоматически определит кодировку XML из двоичных данных вместо того, чтобы доверять веб-серверу знать правильную кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...