HtmlEntity.DeEntitize () 메서드를 사용하여 KeyNotFoundException

c# html-agility-pack keynotfoundexception

문제

나는 현재 C # 4.0으로 작성된 스크레이퍼에 대해 연구 중이다. .NET의 기본 제공 WebClient 및 RegEx 기능을 비롯하여 다양한 도구를 사용합니다. 내 스크레이퍼의 일부로 HtmlAgilityPack을 사용하여 HTML 문서를 파싱합니다. 내가 원하는대로 일할 수있는 모든 것을 얻었고 코드를 정리했다.

HtmlEntity.DeEntitize() 메서드를 사용하여 HTML을 정리합니다. 나는 몇 가지 검사를했고 그 방법은 훌륭하게 작동하는 것처럼 보였다. 그러나 내 코드 KeyNotFoundException 메서드를 구현하면 KeyNotFoundException 계속 발생합니다. 더 이상 세부 사항이 없기 때문에 나는 꽤 길을 잃었다. 내 코드는 다음과 같습니다.

WebClient client = new WebClient();
string html = HtmlEntity.DeEntitize(client.DownloadString(path));
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

다운로드 된 HTML은 UTF-8로 인코딩됩니다. KeyNotFound 예외를 어떻게 KeyNotFound 있습니까?

인기 답변

4 년 후 일부 인코딩 된 문자 (버전 1.4.9.5)에서도 동일한 문제가 발생합니다. 제 경우에는 문제를 일으킬 수있는 제한된 문자 집합이 있으므로 교체를 수행하는 함수를 작성했습니다.

// to be called before HtmlEntity.DeEntitize
public static string ReplaceProblematicHtmlEntities(string str)
{
    var sb = new StringBuilder(str);
    //TODO: add other replacements, as needed
    return sb.Replace(".", ".")
        .Replace("ă", "ă")
        .Replace("â", "â")
        .ToString();
}

필자의 경우 문자열에는 html로 인코딩 된 문자와 UTF-8 문자가 모두 포함되어 있지만 문제는 인코딩 된 문자와 관련이 있습니다.

이것은 우아한 해결책은 아니지만 문제가있는 인코딩 된 문자의 제한된 (알려진) 모든 텍스트에 대한 빠른 수정입니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.