1,服务器端可以用ADOstream 来解决
function Test()
{
var http = GetXmlHttp();
var url=document.getElementById('durl').value
http.open("GET", url, true);
http.onreadystatechange = function()
{
if (http.readyState == 4 && http.status ==200)
{
var text;
var adoS=new ActiveXObject("ADODB.Stream")
adoS.Charset="gb2312"
adoS.Type=1 //设置为二进制
adoS.mode=3 //设置可读写
//乱码处理,主要是用vbscript的bytes2BSTR
//看到主题<title>和</title>之间是【百度搜索_石靖】了。
adoS.open
var txt=http.responseBody
adoS.Write(txt) //用二进制写
adoS.Position=0 //一定要先归0
adoS.Type=2 //才可以设置为文本方式
document.getElementById('HtmlDiv').innerHTML=(adoS.ReadText())
}
}
http.send(null);
}
function GetXmlHttp()
{
var C = null;
try
{
C = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
C = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(sc)
{
C = null;
}
}
if( !C && typeof XMLHttpRequest != "undefined" )
{
C = new XMLHttpRequest();
}
return C;
}
</script>
2 客户端可以用VBS解决
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
<script type="text/javascript">
function Test()
{
var http = GetXmlHttp();
var url;
url = "http://www.baidu.com";
// url = "http://www.baidu.com/s?tn=cjlgainmoney&word=%CA%AF%BE%B8&_sv=1&_si=%CB%D1%CB%F7";
//http.open("GET", url, true);
http.open("GET", url, false);
http.onreadystatechange = function()
{
if (http.readyState == 4 && http.status ==200)
{
var text;
//乱码处理,主要是用vbscript的bytes2BSTR
text = bytes2BSTR(http.responseBody);
// text = http.responseText;//直接用http.responseText会显示乱码
}
}
http.send(null);
text = bytes2BSTR(http.responseBody);
document.getElementById("HtmlDiv").innerHTML = text;
</script>
xmlhttp乱码的解决方案
最新推荐文章于 2017-08-09 20:24:06 发布