http://time-is-life.cnblogs.com/articles/331969.html

解决方案 »

  1.   

    >编码换成utf-8试试我要访问别人的网页,别人网页的编码我无法改变
    我用   xmlHttp.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); 
    或者用
       xmlHttp.setRequestHeader("Content-Type", "text/html;charset=gb2312"); 返回的都是乱码
      

  2.   

    http://www.cnitblog.com/aiut/archive/2005/11/17/4641.html
      

  3.   

    楼上给出的AdoDb.Stream都是客户端的,现在我想要的是服务器端的。
    因为在服务器端用xmlHttp的时候,返回的responseText已经是string类型的
    但是里面的汉字都是乱码,所以现在的问题是怎么样把这些乱码转换成正常的汉字
    或者直接返回的就是正常的汉字
      

  4.   

    以XML的格式返回,通过XML对象来读取。
    ————————————————————————————————————
    想开发类似于AJAX的可直接编辑数据、可直接打印、可无刷新从服务器存取数据的报表吗?那就用lgxgrid表格控件吧!欢迎试用lgxgrid表格控件,内置强大的编辑、格式控制和打印功能,内置通过XML与WebService服务交换数据的便捷方法(开发基于B/S的WEB应用程序很有用),有详尽的中文帮助文档,有基于VB6、C#、ASP.net、VC++的例程!欢迎访问http://lgxyslldw.512j.com
      

  5.   

    我在vs2005下用你这个代码测试,没有乱码:
    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />\n<meta http-equiv=\"content-language\" content=\"gb2312\" />\n<title>网易</title>\n<style type=text/css>\n<!--\nhtml {min-width:750px;}\nbody {text-align:center; margin:0px;}\nbody > div {text-align:center; margin-right:auto; margin-left:auto;} \nform, input, select {margin:0px; padding:0px;}\nbody, div {font-size:12px; font-family:宋体;}\nimg,a img{border:0; margin:0; padding:0;}\ninput,select{font-size:12px;vertical-align:middle}\ninput{padding-top:2px}\na {color:#00f; text-decoration:underline;}\na:hover {color:#f00;}\n.red{color:red}\n.green{color:green}\nsup{text-decoration:none}\n\n#UrsLogin, #LogoNav, #Column70,#Column30, #Content1, #Content2, #Column120, #bNav, #Copyright {clear:both; width:750px;height:auto;}\n\n/*=====urs登陆口=====*/\n#UrsLogin {border:1px solid #ccc; background:#EBEBEB; padding:2px; width:744px!important; width /**/:750px; height:22px!important; height /**/:28px;}\n#userName,#password{width:73px}\n#userName{color:#aaa}\n#loginSelect{width:90px}\n\n/*=====网易Logo & 频道导航=====*/
      

  6.   

    谢谢楼上,我测试了一下,http://www.163.com确实没有乱码
    可是http://www.sohu.com
        http://www.tom.com
       http://www4.skycn.com/sort/sort020000_indate_DESC_1.html
       等等大部分网页都是乱码,这是为什么那?
      

  7.   

    xmlhttp的版本问题,可能你使用的MSXML.dll的版比较旧,MSXML.dll的98版本在98下比较容易出现乱码!XP以上的版好些。请你使用新的版本!最好3.0以上
    ————————————————————————————————————
    想开发类似于AJAX的可直接编辑数据、可直接打印、可无刷新从服务器存取数据的报表吗?那就用lgxgrid表格控件吧!欢迎试用lgxgrid表格控件,内置强大的编辑、格式控制和打印功能,内置通过XML与WebService服务交换数据的便捷方法(开发基于B/S的WEB应用程序很有用),有详尽的中文帮助文档,有基于VB6、C#、ASP.net、VC++的例程!欢迎访问http://lgxyslldw.512j.com
      

  8.   

    xmlHttpRequest编码转换一下,decoding=default
      

  9.   

    很奇怪,http://www.sohu.com和http://www.tom.com跟 163.com一样都是gb2312的编码,不应该不一样啊.
    另外你在发出请求的时候指定 xmlHttp.setRequestHeader("Content-Type", "text/html;charset=gb2312"); 这个没什么意义,还是要看服务端返回给你的是什么编码的,可以通过读取返回的header中的Content-Type来获取服务端返回来的编码,然后根据这个编码来构造相应的读取器.
    另外,你如果要抓网页的话,建议采用HttpWebRequest来获取网页,HttpWebRequest是dotnet内建的类,然后将抓来的网页用Sgml转换为xml友好的格式,就可以使用XmlDocment就行分析处理了.
      

  10.   

    >xmlhttp的版本问题,可能你使用的MSXML.dll的版比较旧,MSXML.dll的98版本在98下比较容易
    >出现乱码!XP以上的版好些。请你使用新的版本!最好3.0以上我试验了一下msxml5.0,结果还是出现乱码.>xmlHttpRequest编码转换一下,decoding=default对于下面的代码:MSXML2.XMLHTTPClass xmlHttp;  //用于发送Http请求的MSXML2.XMLHTTPClass类型的变量
    xmlHttp = new MSXML2.XMLHTTPClass();
    //设置http请求的参数
    xmlHttp.open("GET" , url , false , null , null );          
    xmlHttp.setRequestHeader( "Accept-Lauguage" , "zh-cn" );  
    xmlHttp.setRequestHeader("Content-Type", "text/html;charset=gb2312"); 
    //发送http请求
    xmlHttp.send( null );          

    if( xmlHttp.status == 200 )          
    {  //请求成功 
    Response.Write(xmlHttp.responseText);
    }
    else
    {  //请求失败
    Response.Write("请求失败");
    }在哪里设置decoding=default阿>很奇怪,http://www.sohu.com和http://www.tom.com跟 163.com一样都是gb2312的编码,
    >不应该不一样啊.确实不一样,有的网站返回汉字,有的网站就使乱码或者一大堆问号
    >另外你在发出请求的时候指定 xmlHttp.setRequestHeader("Content-Type", "text/html;charset=gb2312"); 
    >这个没什么意义,还是要看服务端返回给你的是什么编码的,可以通过读取返回的header中的
    >Content-Type来获取服务端返回来的编码,然后根据这个编码来构造相应的读取器.我用了
    string header = "";
    ...
    header = xmlHttp.getResponseHeader( "Content-Type" );
    Response.Write( header );发现tom, sohu,csdn,sina,163等网站返回的都是text/html.
    然后我把请求中的一句改成这样:xmlHttp.setRequestHeader("Content-Type", "text/html"); 然后post网页,结果还是一样,163,csdn返回的是中文,sina,sohu,tom返回的都是乱码>另外,你如果要抓网页的话,建议采用HttpWebRequest来获取网页,
    >HttpWebRequest是dotnet内建的类,我用了下面的代码://变量定义
    string respstr;WebRequest myWebRequest=WebRequest.Create(url);// Assign the response object of 'WebRequest' to a 'WebResponse' variable.
    WebResponse myWebResponse=myWebRequest.GetResponse();
    System.IO.Stream stream = myWebResponse.GetResponseStream();
    StreamReader sr = new StreamReader(stream);
    //以字符串形式读取数据流
    respstr = sr.ReadToEnd();
    sr.Close(); return respstr;结果csdn返回的是中文,163,sina,tom,sohu返回的都是乱码
    >然后将抓来的网页用Sgml转换为xml友好的格式,就可以使用XmlDocment就行分析处理了.Sgml也是一种文件格式,怎么样利用sgml转换成友好的格式阿,能否给具体一点的提示
    另外我现在得到的是乱码,好像用sgml也不奏效吧
      

  11.   

    >>发现tom, sohu,csdn,sina,163等网站返回的都是text/html.
    我看了一下,tom、sina、sohu都是<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    csdn是:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />>>StreamReader sr = new StreamReader(stream);
    这里有问题,StreamReader默认的编码都是UTF-8,如果你不指定编码就是使用默认的UTF-8行解码,所以你看到的结果是csdn的没有乱码(就它使用的是UTF-8编码),别的都乱了。这里要用StreamReader(Stream stream,Encoding encoding)这个构造方法,指定流的编码,这里的encoding就是具体你抓到网页的编码,使用返回网页的Content-Type获知网页使用的编码,时候使用相应的Encoding去构造StreamReader就ok了>>Sgml也是一种文件格式,怎么样利用sgml转换成友好的格式阿,能否给具体一点的提示
    另外我现在得到的是乱码,好像用sgml也不奏效吧
    这里我写错了,应该是SgmlReader,一个转换成xml友好格式的开源组件。