C #을 통해 HTML utf-8 charset을 ISO-8859-1로 변환

c# encode html html-agility-pack iso-8859-1

문제

나는 성공없이 애트리뷰트의 html 값을 변환하려고 고심했다.

다음은 HTML로 변환하려고 시도한 것입니다 (여기서 문자 세트는 여기에 표시되지 않지만 꼭 본대로 표시됩니다).

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

좋아,이 htmlnode의 값은 "Administraçà £ o - São Paulo - diurno"입니다.

HtmlAgilityPack을 사용하여 HtmlPage를 파싱하고, 일단이 노드에 도달하면 innerText 값은 다음과 같습니다. Administração â São Paulo â diurno

페이지의 원래 문자셋이 UTF-8이기 때문에 HTML의 인코딩 태그가 나에게 알려주기 때문에 가정합니다.

어떻게이 이상한 문자열을 다음과 같이 변환 할 수 있습니까? Administração - São Paulo - Diurno ?

나는 이미이 스레드를 시도했다. 하나의 스레드두 개의 스레드 는 모두 내 문제를 해결했다.

편집 : 나는 C # WebRequest 가져 오기를 통해 페이지를 받고있다.

EDIT2 : HtmlAgilityPack 태그가 추가되었습니다.

문제가 격리되었습니다. WebRequest가 Html을 때때로 망치고 있습니다.

인코딩을 설정하는 다른 방법이 있습니까? 나는 노력하고있다 : _webReq.Encoding = "ISO-8859-1"

미리 감사드립니다.

수락 된 답변

작은 테스트 후에 문자열이 Encoded를 원래 형식으로 제대로 가져 오지 못하고 있음을 알 수 있습니다.

샘플 테스트 :

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

인쇄 내용 :

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

보시다시피 원래 문자열은 UTF8을 사용하여 바이트로 변환되고 있지만 기본 인코딩을 사용하여 다시 문자열로 변환됩니다.

이것은 잘못된 것입니다.

WebRequest.GetResponse ()가 문자열을 잘못된 값으로 반환하면 해당 메서드에 문제가있는 것입니다. HttpWebRequest의 TransferEncoding 속성을 UTF8로 설정해보십시오.

TransferEncoding 속성을 설정하려면 먼저 SendChunked 속성을 true로 설정해야합니다. TransferEncoding을 null로 설정하여 지우는 것은 SendChunked의 값에 영향을주지 않습니다. TransferEncoding 속성에 할당 된 값은 기존 내용을 대체합니다.

또는 열어 놓은 StreamReader에서 인코딩을 UTF8로 설정할 수도 있습니다. 당신의 코드를 볼 수 있습니까?


인기 답변

내가 해결 :

    HtmlWeb Webget = new HtmlWeb();
    HtmlDocument doc = new HtmlDocument();
    Webget.AutoDetectEncoding = false;
    Webget.OverrideEncoding = Encoding.UTF8;

    doc_tmp.OptionOutputAsXml = true;
    doc_tmp.OptionReadEncoding = true;
    doc_tmp.OptionFixNestedTags = true;
    doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;

            doc_tmp.LoadHtml(tmp.InnerHtml);
            doc_tmp.Save(Console.Out);


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