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

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

Vì vậy, mã này trở lại " 'câu hỏi tâm lý học: những gì gây ra đồng tính luyến ái ... - Naujienų cổng Alfa.lt? Thay vì" độc giả đọc"câu hỏi tâm lý học: những gì gây ra đồng tính luyến ái - Tin tức Portal Alfa.lt? "C# và vấn đề mã hóa HtmlAgilityPack

Trang web này được mã hóa trong năm 1257 (Baltic), nhưng trả textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; văn bản bị bóp méo -. Dấu Baltic được chuyển thành một số ký tự lạ một số chuỗi dài :(

Và vâng, tôi đã cố gắng diễn đàn HtmlAgilityPack Họ làm hút

PS tôi không phải lập trình viên, nhưng tôi làm việc trên một dự án cộng đồng và tôi thực sự cần phải nhận được mã này làm việc Cảm ơn;..}

Trả lời

21

Trên thực tế trang web được mã hóa với UTF-8.

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

sẽ làm việc.

Hoặc bạn có thể sử dụng mã trong tôi SO answer Những phát hiện mã hóa từ các tiêu đề HTTP hoặc thẻ meta, en đúng re-encode. (Nó cũng hỗ trợ gzip để giảm thiểu tải xuống của bạn).

Với lớp tải về mã của bạn sẽ trông như thế:

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

Yup, đó là tăng công việc: D Wow, khá đơn giản, không phải là nó. Cảm ơn! – August

+2

cảm ơn nhiều, có các nhân vật điên như bất cứ điều gì hoặc, bây giờ nó đang làm việc tốt –

+0

Dehell là GodLikeHTML? Đây có phải là một từ đồng nghĩa hoặc Thật sự tôi đang tìm một lớp học với nhà đó? – helmesjo

1

mà cố gắng để thay đổi GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

+0

xin lỗi, tôi đã lạc lối bạn - nó đã được mã hóa trong UTF. Nhờ sự giúp đỡ của bạn mặc dù. – August

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

hy vọng nó sẽ giúp :)

11

I Had một vấn đề mã hóa tương tự. Tôi cố định nó, trong phiên bản mới nhất của HtmlAgilityPack, bằng cách thêm següents để khởi WebClient của tôi.

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

Câu trả lời hay nhất (tại sao nên sử dụng webclient khi bạn có thể làm điều đó bằng cách chỉ sử dụng HTMLAgilityPack – a1204773

1

UTF8 không làm việc cho tôi, nhưng sau khi mã hóa thiết lập như thế này, hầu hết các trang tôi đã cố gắng để chỉ Cạo làm việc wel:

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

Có lẽ nó có thể giúp ai đó.

0

Đây là giải pháp của tôi

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

nếu tất cả những bài không hoạt động, Chỉ cần sử dụng này: WebUtility.HtmlDecode("Your html text");

Các vấn đề liên quan