Silverlight: кодирование потока WebClient

#windows #silverlight #windows-phone-7 #encoding #webclient

#Windows #silverlight #windows-phone-7 #кодирование #webclient

Вопрос:

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

Что мне нужно сделать, это взять website .html и сохранить его в текстовом файле. Теперь проблема в том, что этот веб-сайт на русском языке (кодировка Windows-1251), а Silverlight поддерживает только 3 кодировки. Итак, чтобы обойти это ограничение, я получил в свои руки класс encoding, который передает поток в массив байтов, а затем пытается извлечь правильно закодированную строку из текста. Проблема с этим заключается в том, что

1) Я пытаюсь убедиться, что WebClient получает поток в кодировке Unicode, потому что другие, похоже, не создают извлекаемую строку, но, похоже, это все еще не работает.

 WebClient wc = new WebClient();
        wc.Encoding = System.Text.Encoding.Unicode;
        wc.DownloadStringCompleted  = new DownloadStringCompletedEventHandler(wc_LoadCompleted);
        wc.DownloadStringAsync(new Uri(site));
  

2) Я боюсь, что когда я сохраняю html в текстовый файл с помощью StreamWriter, кодировка, опять же, каким-то образом испорчена.
3) Класс encoding не выполняет свою работу.

 Encoding rus = Encoding.GetEncoding(1251);
        Encoding eng = Encoding.Unicode;
        byte[] bytes = rus.GetBytes(string);
        textBlock1.Text = eng.GetString(bytes);
  

Кто-нибудь может предложить какую-либо помощь по этому вопросу? Это огромный ущерб моему проекту. Заранее спасибо,

Ответ №1:

Поскольку вы хотите обработать кодировку, не используемую Silverlight, вам следует начать с загрузки с помощью OpenReadAsync и OpenReadCompleted .

Теперь вы должны быть в состоянии использовать свойство, Stream предоставляемое аргументами события Result , и передать его непосредственно приобретенному вами компоненту кодирования, чтобы сгенерировать правильный результат строки.

Комментарии:

1. Спасибо! Я переписал, я изменил на ‘OpenReadAsync’, но я все еще не мог получить правильный текст. Затем я заметил, что у StreamReader тоже есть свойство encoding, поэтому я установил для него значение Unicode, запустил код, и он работает!