2015-01-28 5 views
0

Я пытаюсь разобрать html-документ с помощью .NET WebClient, но символы, которые я получаю, неверны. Я сконфигурировал много кодировок, но я не могу найти, почему я ошибаюсь:Чистая кодировка WebClient не работает

URL-адрес: http://www.vatican.va/archive/ESL0506/__P2.HTM.

Это мой код (вы можете проверить это в ConsoleApp)

static void Main(string[] args) 
    { 
     WebClient client = new WebClient(); 
     client.Encoding = Encoding.GetEncoding(28591); 
     var htmlCode = client.DownloadString("http://www.vatican.va/archive/ESL0506/__P2.HTM"); 

     var splittedHtml = htmlCode.Split('<').ToList(); 

     var htmlVerses = splittedHtml.Where(x => x.StartsWith("p class=MsoNormal align=left")).ToList(); 
    } 

Тогда в htmlVerses я получаю строки типа:

"p class=MsoNormal align=left style='margin-left:0cm;text-align:left;\ntext-indent:0cm'>3 Entonces Dios dijo: &laquo;Que\nexista la luz&raquo;. Y la luz existi&oacute;." 

Проверьте эту часть: 3 Entonces Dios dijo: &laquo;Que\nexista la luz&raquo;. Y la luz existi&oacute;

Its недостаточно хорошо разбирается. Оно должно быть: 3 Entonces Dios dijo: «Que exista la luz». Y la luz existió.

Если мы проверить исходный код хром, мы получаем следующее:

enter image description here

Затем я попытался получить исходный код из http://www.generateit.net/seo-tools/source-viewer/, и я получаю такое же, как и в аномально мой приложение.

Его действительно странно, кодировка, которую использует веб-страница, это charset = iso-8859-1, то же, что и мой веб-клиент.

Любая помощь будет оценена по достоинству.

+0

В качестве бокового узла: не используйте 'htmlCode.Split ('<').'. Используйте настоящий html-парсер, например [HtmlAgilityPack] (http://htmlagilitypack.codeplex.com/) – EZI

ответ

1

HTML выдает специальные символы для передачи, вам нужно их вернуть. К счастью, .NET предоставляет методы для автомагически сделать это для вас:

HttpUtility.HtmlDecode() 

см: MSDN

Если вы используете .NET 4.5, то вы можете использовать WebUtility.HtmlDecode() вместо этого, который уже включен в System.Net (см.: MSDN)

+0

Кроме того, я бы использовал 'Encoding.GetEncoding (« iso-8859-1 »)' вместо жесткого кодирования кодовой страницы – Setsu

+0

Thats Это! У меня есть некоторые проводные escape-символы (\ n), но я ничего не могу обработать. Что касается кодировки, я попробовал их обоих. благодаря – Andres

Смежные вопросы