2010-09-29 3 views
4

Я пытаюсь портировать приложение .NET из Windows на Mono, но определенный код, который работает на Windows, больше не работает (, как и ожидалось) на моно:не Mono WebClient проблема кодирования

WebClient client = new WebClient(); 
Console.WriteLine (client.DownloadString("http://www.maxima.fm/51Chart/")); 

Кажется, что правильно определено кодирование как UTF-8 (и ручная настройка кодировки на UTF-8 или ASCII тоже не работает) еще есть?? символы

ответ

2

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

Также сайт, который вы указали в качестве примера, полностью испорчен. Веб-сервер отправляет HTTP-заголовок Content-Type: text/html; charset=iso-8859-1, а в полученном HTML-файле вы видите <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />, который, конечно же, совершенно некогерентен. Вы не можете ожидать, что HTTP-клиент будет корректно вести себя, если столкнутся с нестандартным сайтом, что вы получаете, это неожиданное поведение.

Пробуйте тестирование на каком-либо веб-сайте, который соблюдает минимум веб-стандартов.

Примечание: WebClient реализует IDisposable, поэтому обязательно заверните его в инструкцию using.


UPDATE:

Чтобы заставить его работать с этим конкретным сайте вы можете попытаться загрузить ответ вручную и указав правильно кодировку:

// You may try different encodings here (for me it worked with iso-8859-1) 
var encoding = Encoding.GetEncoding("iso-8859-1"); 
using (var client = new WebClient()) 
{ 
    using (var stream = client.OpenRead("http://www.maxima.fm/51Chart/")) 
    using (var reader = new StreamReader(stream, encoding)) 
    { 
     var result = reader.ReadToEnd(); 
     Console.WriteLine(result); 
    } 
} 
+0

Спасибо за рекомендации 'using', однако мне нужно, чтобы мой код работал на этом конкретном сайте (нет проблемы с кодировкой консоли, которую я проверил), и даже если сайт испорчен, sh отлично работает на всех моих браузерах на всех платформах, пожалуйста, мне нужно решение;) – Luffy

+0

@ Luffy, см. мое обновление. –

+0

он отлично работает: D – Luffy

0
using (var client = new WebClient()) 
     { 
      client.Encoding = Encoding.UTF8; 
      Console.WriteLine (client.DownloadString("http://www.maxima.fm/51Chart/")); 
     } 
Смежные вопросы