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

问题是,用alert()显示responseText时,所有中文字都显示成乱码。我怀疑问题出在XMLHttpRequest无论如何都把页面当成Unicode编码的,阅读后... 问题是,用 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 里。

盼网络编程高手指点。。。
展开
 我来答
Loadinger
2006-12-11 · TA获得超过552个赞
知道小有建树答主
回答量:757
采纳率:100%
帮助的人:417万
展开全部
LZ对Y是没有控制权的.呵呵..理解一下....没有写编码.只有text/html的情况.我也不太清楚默认是以什么形式的.但是我觉得如果多种编码都尝试一下以后,就会正确的.我以前写过一个AJAX的类似的页面.也是写着玩.最开始的时候也是乱码.后来通过把服务器端的回显类似强制定义以后.就可以了.
Response.ContentType="text/xml"
Response.CharSet = "GB2312"
我用ASP是这样写的.但是服务器端不能控制的话.只能对客户端进行编码了.
http://hi.baidu.com/loadinger/blog/item/6ba9da1652dbe118962b43aa.html
上面是我的这个AJAX的代码.不知道对LZ有没有帮助.楼主QQ多少.一起研究一下编码问题.这个以后肯定还会碰到的...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leeps_my
2006-12-15 · TA获得超过807个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:0
展开全部
 
 
 
在 Greasemonkey 里即是在火狐里,那你大可调用火狐的 XMLHttpRequest 对象专有的 overrideMimeType( ):
http://www.xulplanet.com/references/objref/XMLHttpRequest.html#method_overrideMimeType

以 'text/html; charset=gb2312' 作为该方法的参数就可以了。
 
 
 
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
samzhangcom
2006-12-07 · TA获得超过183个赞
知道答主
回答量:81
采纳率:0%
帮助的人:0
展开全部
这个问题在于,你所请求数据的页面编码必须是utf-8的,他默认是用这种编码传递数据的,至于数据到你的页面时,编码可以任意的,你多试一下就会明白的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Williamzyf
2006-12-02 · TA获得超过400个赞
知道小有建树答主
回答量:405
采纳率:0%
帮助的人:0
展开全部
首先在顶部写上这段代码:<%!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("传过来的值"));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式