我正在使用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字符串。