2011-11-04 36 views
0

我试图抓取一个英文和韩文混合的网页。浏览器可以抓取并显示页面,但是当我尝试以编程方式抓取它时,我无法让韩文字符正确显示。用StreamReader读取外语网页

我知道你可以在StreamReader中指定一个编码,但是我还没有找到一个可以工作的编码。

这是我用来读取响应代码:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet)); 

response.CharacterSet返回UTF8。我还尝试了所有基本编码选项 - ASCII,BigEndian,默认,Unicode,UTF32,UTF7,并手动添加Encoding.UTF8。

我也试着去了解它通过的CultureInfo:同时使用 “KO” 和 “KO-KR”

CultureInfo kr = CultureInfo.GetCultureInfo("ko"); 
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(kr.TextInfo.ANSICodePage)); 

。我得到了所有这些不同类型的不同结果,但没有一个是正确的。

我也试过直接将代码页:

StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(949)); 

response.ContentEncoding返回一个空字符串。我正在用尽想法。

编辑:这是我很期待的一个例子:

프로젝트:

这里就是我得到:

 //ASCII == ?????? 
     //BigEndian == ़汩湫â¨ç‰¥æ˜½âˆ¯æ©³â½¤ç°æ” 
     //Default == íâ€â€žÃ«Â¡Å“ì Â트: 
     //Unicode == íâ€â€žÃ«Â¡Å“ì Â트 
     //UTF32 == ���������ï 
     //UTF7 == 프로ì Â트 
     //UTF8 == 프로ì 트 
+1

你说它不能正确显示,但你没有显示显示代码。 – Paddy

+2

您使用HTTP请求发送了哪些标头?将此与浏览器发送的内容进行比较(Fiddler对此类事情非常有帮助)。 – Richard

回答

1

FWIW:流读者可能不会很好地工作。

尽量使用HttpWebRequest Class做浏览器的请求(或者你会开始后悔很快感觉,当你得到302个响应或gzip压缩和/或分块编码)

我提拔了这一个答案,因为它威力非常以及你已经遇到的问题。我不知道什么你正在收到的回复看起来像,当然

+0

我使用HttpWebRequest和HttpWebResponse类 - 然后使用StreamReader从HttpWebResponse中读取响应流。 –