我正在读的HTML与HtmlAgilityPack,编辑它,然后将它输出到一个StreamWriter。所述HtmlAgilityPack编码是Latin1的,并且是的StreamWriter UnicdeEncoding。

我失去的转换一些字符,我不想要的。

我似乎不能够改变一个StreamWriter的编码。什么是解决这个问题的最好?

有帮助吗?

解决方案

如果网页是真正的Latin-1(ISO-8859-1),它不能有任何弯引号; Latin-1的对这些字符没有映射。如果你能看到弯引号当您在浏览器中打开网页,他们可以在HTML实体(“”“”)的形式。但我怀疑网页的编码是真正的窗口1252,尽管什么头和嵌入式声明说。

窗口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(INC。StringWriter / StringBuilder,你是隐式使用。NET的UTF-16字符串。

如果你只是想调整的报告编码(但使用string),然后看Jon的回答这里

目前尚不清楚其结束你在失去字符。在任何情况下,仅仅编码不一致本身不是一个问题 - 你仍然应该得到正确的字符。如果一个Unicode的StreamWriter写出乱码,这意味着它已经摆在首位收到垃圾输入。这可能意味着HtmlAgilityPack了编码为您的网页错误。如果有手动设置编码的选项,你可能想做到这一点。

这也可能是你有中有一个错误编码申报的HTML页面。例如。它可能是一个UTF-8文件,其中包含<meta>元件声明为Latin-1的。你在哪里得到的文本?你从网上下载它直,还是有它在一个文本文件 - 如果是后者,你如何创建一个文件?如果通过手动记事本做到了,或者在经由StreamWriter代码,则可能有一个UTF-8文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top