用 JavaScript 的 XMLHttpRequest 对象阅读只提供 GB2312 编码的网页,结果得乱码

来源:百度知道 编辑:UC知道 时间:2024/06/04 22:36:16
问题是,用 alert( ) 显示 responseText 时,所有中文字都显示成乱码。
我怀疑问题出在 XMLHttpRequest 无论如何都把页面当成 Unicode 编码的,阅读后没有转换直接储存成 String。

希望高手分析分析然后提供解决办法。
谢谢!
浪子William 和 samzhangcom,谢谢你们的尝试。

其实我碰到的是 Greasemonkey User Script 里的问题。
我是想在页面 X 打开后用 XMLHttpRequest 读取另一个页面(Y)以便提取一些资料然后嵌入页面 X。

我试过利用 HTTP Request Headers 里的 Accept-Charset 尝试索取 UTF-8 内容,但没用,因为页面 Y 的网站只提供 GB2312 编码的页面(负责人在回函里如是说)。

前几天,我读了些 HTTP Headers 的资料,然后检测页面 Y 的 Header,发现 Content-Type 是 "text/html"。然后我找到 XMLHttpRequest.responseText 的可靠文档(http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest-members),细读后发现问题就出在那个 Content-Type 里没有指定编码为 GB2312,导致服务器传过来的数据的编码被默认为 UTF-8,所以没有经过转换便被直接储存进 responseText 里。

盼网络编程高手指点。。。

 
 
 
在 Greasemonkey 里即是在火狐里,那你大可调用火狐的 XMLHttpRequest 对象专有的 overrideMimeType( ):
http://www.xulplanet.com/references/objref/XMLHttpRequest.html#method_overrideMimeType

以 'text/html; charset=gb2312' 作为该方法的参数就可以了。
 
 
 

首先在顶部写上这段代码:<%!String trans(String chi)
{
String result=null;
byte temp[];
try
{
temp=chi.getBytes("iso-8859-1");
result=new String(temp);
}
catch(UnsupportedEncodingException e)
{
System.out.println(e.toString());
}
return result;
}
%>
再用这个方法来传值:String 变量名=trans(request.getParameter("传过来的值"));

这个问题在于,你所请求数据的页面编码必须是utf-8的,他默认是用这种编码传递数据的,至于数据到你的页面时,编码可以任意的,你多试一下就会明白的。

LZ对Y是没有控制权的.呵呵..理解一下....没有写编码.只有text/html的情况.