用 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 里。
盼网络编程高手指点。。。 展开
我怀疑问题出在 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 里。
盼网络编程高手指点。。。 展开
展开全部
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多少.一起研究一下编码问题.这个以后肯定还会碰到的...
Response.ContentType="text/xml"
Response.CharSet = "GB2312"
我用ASP是这样写的.但是服务器端不能控制的话.只能对客户端进行编码了.
http://hi.baidu.com/loadinger/blog/item/6ba9da1652dbe118962b43aa.html
上面是我的这个AJAX的代码.不知道对LZ有没有帮助.楼主QQ多少.一起研究一下编码问题.这个以后肯定还会碰到的...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在 Greasemonkey 里即是在火狐里,那你大可调用火狐的 XMLHttpRequest 对象专有的 overrideMimeType( ):
http://www.xulplanet.com/references/objref/XMLHttpRequest.html#method_overrideMimeType
以 'text/html; charset=gb2312' 作为该方法的参数就可以了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题在于,你所请求数据的页面编码必须是utf-8的,他默认是用这种编码传递数据的,至于数据到你的页面时,编码可以任意的,你多试一下就会明白的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先在顶部写上这段代码:<%!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("传过来的值"));
{
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("传过来的值"));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询