ajax编码问题

  最近用ajax做点小东西,但是这恼人的编码问题一直若隐若现的,真摸不太透。反正认死了一个理,前台后台都是utf-8准没错,试试看,果然没错,但是这是为啥呢?咱就有关坏毛病,总爱刨根问底就算不全挖出来吧,也得看见过根生什么色的吧。
      于是乎,我开始测试测试。先测试什么呢?先从简单的开始吧。


首先创建个 testA.jsp

Java代码 复制代码
  1. <%@ page contentType="text/html; charset=GB2312"%>   
  2. <%   
  3. request.seCharacterEncoding("GB2312");   
  4. %>   
  5. <html>   
  6. <head>   
  7. <title>JSP的中文处理</title>   
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB2312">   
  9. </head>   
  10.   
  11. <body>   
  12.   
  13. <%   
  14. out.print("我是中文");   
  15. out.print("<br>")   
  16. out.print("我真的是中文");   
  17. %>   
  18. </body>   
  19. </html>  
<%@ page contentType="text/html; charset=GB2312"%>
<%
request.seCharacterEncoding("GB2312");
%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
</head>

<body>

<%
out.print("我是中文");
out.print("<br>")
out.print("我真的是中文");
%>
</body>
</html>



测试一下,没有问题。

在弄个html页面  TesxA_Ajax.html(注:这里用了jquery的ajax库,偷懒下直接copy官方的例子实现ajax,怎么实现无所谓)

Java代码 复制代码
  1.   
  2. <html>   
  3. <head>   
  4.   <script src="http://code.jquery.com/jquery-latest.js"></script>   
  5.      
  6.   <script>   
  7.   $(document).ready(function(){   
  8.     $("#myt").load("testA.jsp");  <!-- 就是把 id为myt的div标签读取testA.jsp页面 -->   
  9.   });   
  10.   </script>   
  11.   <style>body{ font-size: 11px; font-family: Arial; }</style>   
  12. </head>   
  13. <body>   
  14.   <b>jQuery Links:</b>   
  15. <div id="myt"></div>   
  16. </body>   
  17. </html>  
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  
  <script>
  $(document).ready(function(){
    $("#myt").load("testA.jsp");  <!-- 就是把 id为myt的div标签读取testA.jsp页面 -->
  });
  </script>
  <style>body{ font-size: 11px; font-family: Arial; }</style>
</head>
<body>
  <b>jQuery Links:</b>
<div id="myt"></div>
</body>
</html>



测试一下,也没问题。


那我一点点改了
先去掉

Java代码 复制代码
  1. request.seCharacterEncoding("GB2312");  
request.seCharacterEncoding("GB2312");


这样改了之后,浏览器会根据系统当前编码去设置字符集。
直接访问testA.jsp,正常.
再访问 testA_ajax.html,乱码了. 在google半天知道了,xmlhttp默认编码是utf-8,我在response未设置过字符集所以他才找默认的。

再试试,

Java代码 复制代码
  1. request.seCharacterEncoding("utf-8");  
request.seCharacterEncoding("utf-8");


结果都不用看,这样测试等于没测试。
刚刚不是说了吗,utf-8不能正常显示,又这样设置,再回头看看testA.jsp,连他都给乱码了。
哎,网上不是说统一换成utf-8就OK了,为啥我换半天都不成,反而换成gb2312就没问题。

汗颜,少做了一件事情。
用记事本打开testA.jsp , 然后另存为 保存的时候选择一下 编码 格式为utf-8。

再试试看,终于OK了,真是够罗嗦的,要不是看见大家都赶时髦走国际化用上了utf-8,我干脆前后都是gb2312就完事了。


折腾了半天,有几个结论:
1.<meta http-equiv="Content-Type" content="text/html; charset=GB2312">此句都是为浏览器所用,浏览器根据它选择以后编码方式。而request.seCharacterEncoding("utf-8");是通过web服务器改变http头中的编码集,如果为空则默认为utf-8编码,所以才出现上文所说的gb2312正常而默认便出现乱码的情况了。根据http协议,他所传输的数据带有http头,http头包含字符集标识,也就是说所传输的数据需要用哪种字符集才可以解析。
2.我们利用request.seCharacterEncoding("utf-8");
做的字符集设置,实质上是更改字符输出选择的字符集,而真正显示字符的是testA.jsp,testB.jsp等文本文件,所以要设置其编码方式,否则即便再如何设置字符集也没有任何效果。
3.总之,前台显示数据的文本文件的编码方式,要能够解析后台数据所设置的字符集,才可正常显示。(ps:默认的编码是ansi,即在中文环境下就是gb2312,在日文环境下就是jis。所以默认的文本文件格式是ansi,是不能解析utf-8字符的)

顺便说一下jsp中的get参数传递只要在tomcat的server.xml,配置端口那项 Connector 增加一个
URIEncoding="UTF-8" 属性就可以了!

转自 http://myblog.javaeye.com/blog/214167

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值