인코딩에 관한 질문 : 어떻게 HtmlAgilityPack에서 StringWriter로 출력하고 인코딩을 유지할 수 있습니까?

.net c# encoding html-agility-pack

문제

나는 HtmlAgilityPack으로 html을 읽고, 편집하고, 그것을 StreamWriter로 출력한다. HtmlAgilityPack 인코딩은 Latin1이고 StreamWriter는 UnicdeEncoding입니다.

전환에서 일부 캐릭터를 잃어 버리고 싶지도 않습니다.

StreamWriter의 인코딩을 변경할 수없는 것 같습니다. 이 문제를 해결하기위한 최선의 방법은 무엇입니까?

수락 된 답변

웹 페이지가 실제로 Latin-1 (ISO-8859-1) 인 경우 중괄호를 사용할 수 없습니다. Latin-1에는 해당 문자에 대한 매핑이 없습니다. 브라우저에서 페이지를 열 때 둥근 따옴표를 볼 수 있으면 HTML 엔터티 ( “” 또는 “ ” ) 형식 일 수 있습니다. 그러나 헤더의 내용과 임베디드 선언에도 불구하고 페이지의 인코딩이 실제로 windows-1252라고 의심됩니다.

windows-1252는 \x80..\x9F 범위의 제어 문자 (십진수 128..159 )를보다 유용하거나 (적어도 더 예쁜) 인쇄 문자로 대체한다는 점을 제외하면 Latin-1과 동일합니다. HtmlAgilityPack이 해당 단어로 페이지를 가져 와서 ISO-8859-1로 해독하면 \x93 을 제어 문자 \u0093 변환합니다. 제어 문자 \u0093 은 전혀 표시 할 수 없으면 쓰레기처럼 보입니다. 한편 브라우저는 왼쪽의 큰 따옴표에 대한 유니 코드 코드 포인트 인 \u201C 로 변환합니다.

나는 HtmlAgilityPack에 익숙하지 않고 어떤 문서도 찾을 수 없지만 윈도우 1252를 사용하도록 강요하려고한다. 예를 들어, windows-1252 (또는 "ANSI") StreamReader를 만들고 HAP을 사용하면됩니다.


전문가 답변

추측에. ( string 아닌) Stream 쓰십시오. string (inc. StringWriter / StringBuilder 쓰는 경우 .NET의 UTF-16 문자열을 암시 적으로 사용하고 있습니다.

보고 된 인코딩을 조정 ( string 사용)하고 싶다면 Jon의 대답 을 살펴보십시오.




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