關於編碼的問題:如何從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與Latin-1相同,只是它用更有用(或至少更漂亮)的打印字符替換\x80..\x9F範圍(十進制128..159 )中的控製字符。如果HtmlAgilityPack將頁面轉換為單詞並將其解碼為ISO-8859-1,它會將\x93轉換為控製字符\u0093 ,如果你可以顯示它,它將看起來像垃圾。同時,瀏覽器將其轉換為\u201C ,左雙引號的Unicode代碼點。

我不熟悉HtmlAgilityPack,我找不到任何文檔,但我會嘗試強制它使用windows-1252。例如,您可以創建一個Windows-1252(或“ANSI”)StreamReader並讓HAP使用它。


專家解答

猜測;寫入Stream (不是string )。如果你寫一個string (包括StringWriter / StringBuilder ,你隱式使用.NET的UTF-16字符串。

如果您只想調整報告的編碼(但使用string ),請在此處查看Jon的答案




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因