#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, запустил код, и он работает!