我一直在努力转换属性的html值,但没有成功。
这里是我要转换的HTML (确保字符集不会在这里显示,但是,我看到它和您看到的完全一样)。
<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N" target="_blank">Administração – São Paulo – diurno</a>好的,这个htmlnode的值是“Administra o-圣保罗- diurno”。
我使用HtmlAgilityPack来解析这个节点的HtmlPage,一旦我到达这个节点,它的innerText值就是这样的:Administração â São Paulo â diurno
我假设页面的原始字符集是UTF-8,因为html上的编码标记是这样对我说的。
如何将这个奇怪的字符串转换为:Administração - São Paulo - Diurno?
编辑:我是通过C# WebRequest Get.获得页面的
EDIT2 :添加了HtmlAgilityPack标记
问题是孤立的: WebRequest有时会扰乱Html。
还有其他方法来设置编码吗?我正在尝试:_webReq.Encoding = "ISO-8859-1“
提前感谢
发布于 2012-07-06 14:26:09
经过一个小测试后,您可以看到字符串没有正确地被编码回原来的形式。
样本测试:
var item = "Administração - São Paulo - Diurno";
Console.WriteLine(item);
var buffer = Encoding.UTF8.GetBytes(item);
var item2 = Encoding.Default.GetString(buffer);
Console.WriteLine(item2);这些指纹:
Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno如您所见,原始字符串正在使用UTF8转换为字节,但随后使用默认设置编码将其转换回字符串。
这是错误的。
如果WebRequest.GetResponse()将字符串返回为错误的值,则该方法会出现问题。尝试将HttpWebRequest上的HttpWebRequest属性设置为UTF8。
在设置TransferEncoding属性之前,必须先将SendChunked属性设置为true。通过将TransferEncoding设置为null来清除它对SendChunked的值没有影响。分配给TransferEncoding属性的值替换任何现有内容。
或者,您可以尝试在打开的UTF8上将编码设置为StreamReader。我能看看你的密码吗?
发布于 2017-04-20 15:11:00
我解决了:
HtmlWeb Webget = new HtmlWeb();
HtmlDocument doc = new HtmlDocument();
Webget.AutoDetectEncoding = false;
Webget.OverrideEncoding = Encoding.UTF8;
doc_tmp.OptionOutputAsXml = true;
doc_tmp.OptionReadEncoding = true;
doc_tmp.OptionFixNestedTags = true;
doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;
doc_tmp.LoadHtml(tmp.InnerHtml);
doc_tmp.Save(Console.Out);https://stackoverflow.com/questions/11363589
复制相似问题