Проблема кодирования Mono WebClient - PullRequest
4 голосов
/ 30 сентября 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

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

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

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

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


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 голосов
/ 18 декабря 2016
 using (var client = new WebClient())
        {
            client.Encoding = Encoding.UTF8;
           Console.WriteLine (client.DownloadString("http://www.maxima.fm/51Chart/"));
        }
...