2010-08-10 57 views
18
WebClient GodLikeClient = new WebClient(); 
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument(); 

GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"); 

所以这个代码返回“读者问心理学家:是什么原因导致同性恋...... - Naujienų门户Alfa.lt?”,而不是“读者问心理学家:是什么原因导致同性恋 - 新闻门户Alfa.lt? ”。C#和HtmlAgilityPack编码的问题

此网页编码1257(波罗),但返回textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml;扭曲文本 - 波罗的海变音符号转化为一些奇怪的字符数的长字符串:(

是的,我已经试过HtmlAgilityPack论坛它们不要吸

PS我不是程序员,但我在一个社区项目工作,我真的需要得到这个代码工作的感谢;}

回答

21

其实页面编码使用UTF-8。

GodLikeHTML.Load(GodLikeClient.OpenRead("http://www.alfa.lt"), Encoding.UTF8); 

会工作。

或者你可以在我的SO answer其中使用的代码检测编码从HTTP标头或meta标签,连接正确地重新编码。 (它也支持gzip以最小化你的下载)。

随着类下载你的代码看起来像:

HttpDownloader downloader = new HttpDownloader("http://www.alfa.lt",null,null); 
GodLikeHTML.LoadHtml(downloader.GetPage()); 
+0

是啊,这就是增加工作:d 哇,很简单,是不是。 谢谢! – August 2010-08-11 20:27:54

+2

千恩万谢,到了疯狂的字符,如或什么的,现在它工作正常 – 2014-08-26 10:16:59

+0

Dehell是GodLikeHTML?这是一个同义词或其实我找那所房子的一类? – helmesjo 2014-11-10 15:49:55

1

,尝试改变GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

+0

对不起,我被误导你 - 这是在UTF编码。 感谢您的帮助,虽然。 – August 2010-08-11 20:28:45

6
HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 
StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding    
doc.Load(reader); 

希望它能帮助:)

11

我也有类似的编码问题。我固定它,在HtmlAgilityPack的最新版本中,加入següents我WebClient的初始化。

var htmlWeb = new HtmlWeb(); 
htmlWeb.OverrideEncoding = Encoding.UTF8; 
var doc = htmlWeb.Load("www.alfa.lt"); 
+1

最佳答案(为什么只有使用HTMLAgilityPack才能使用webclient – a1204773 2013-01-02 03:43:59

1

UTF8并没有为我工作,但编码设置这样之后,大多数页面我试图只是刮工作WEL:

web.OverrideEncoding = Encoding.GetEncoding(ISO-8859 -1“);

也许它可能会帮助别人。

0

这是我的解决方案

HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.sina.com.cn"); 
HttpWebResponse response =(HttpWebResponse)request.GetResponse(); 
long len = response.ContentLength; 
byte[] barr = new byte[len]; 
response.GetResponseStream().Read(barr, 0, (int)len); 
response.Close(); 
string data = Encoding.UTF8.GetString(barr); 
var encod = doc.DetectEncodingHtml(data); 
string convstr = Encoding.Unicode.GetString(Encoding.Convert(encod, Encoding.Unicode, barr)); 
doc.LoadHtml(convstr); 
0

如果所有这些后不工作,就用这个:WebUtility.HtmlDecode("Your html text");