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