1

HttpUtility.HtmlDecode() почему-то превращает входную строку в вопросики (скорее всего, проблема в кодировке). WebUtility.HtmlDecode() не убирает символы &gt,&lt и т. д.

Есть ли универсальный способ очистить от этих "паразитов" строку?

insolor
  • 49,104

1 Answers1

1

И HttpUtility.HtmlDecode, и WebUtility.HtmlDecode совершенно корректно обрабатывают и любые символы, и HTTP escape-последовательности:

Console.WriteLine(WebUtility.HtmlDecode("<b>пони</b>"));
Console.WriteLine(HttpUtility.HtmlDecode("<b>правят миром</b>"));

Вывод:

<b>пони</b>
<b>правят миром</b>

С функциональной точки зрения эти методы эквивалентны, они отличаются только сборками и версиями .NET.

Если у вас "вопросики", то, вероятно, строка изначально в неверной кодировке. Убедитесь, что после получения строки её содержимо нормально отображается.

Если же вас интересуют именно последовательности &gtи &lt, то они некорректные, так как не оканчиваются точкой с запятой. При каких-то условиях некорректные последовательности могут всё равно обрабатываться парсерами HTML, будто они корректные. Чтобы получить подобное поведение, воспользуйтесь полноценными парсерами HTML.

Строки с "паразитными lt и gt" и "вопросиками" обычно не появляются просто так. Скорее всего, вы выковыряли их из HTML файла каким-то топорным способом, например, регулярками, а потом пытаетесь получить нормальный текст. Настоятельно рекомендую пользоваться полноценными парсерами, потому что они не только решат ваши проблемы с "мусорными символами", то и значительно упростят извлечение информации из HTML файлов.

Kyubey
  • 32,103
  • а как теги тоже удалить? – Radzhab 654654 Nov 28 '15 at 11:13
  • @Radzhab654654 Пройдите по ссылке в ответе, там список парсеров HTML. CsQuery, HAP и AngleSharp умеют извлекать текст без тегов. – Kyubey Nov 28 '15 at 11:17