编码问题

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


首先创建个 testA.jsp

<%@ page contentType="text/html; charset=GB2312"%>
<%
request.seCharacterEncoding("GB2312");
%>


JSP的中文处理





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


测试一下,没有问题。

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



  
  
  
  


  jQuery Links:


测试一下,也没问题。


那我一点点改了
先去掉
request.seCharacterEncoding("GB2312");

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

再试试,
request.seCharacterEncoding("utf-8");

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

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

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


折腾了半天,有几个结论:
1.此句都是为浏览器所用,浏览器根据它选择以后编码方式。而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" 属性就可以了!

你可能感兴趣的:(Ajax,JSP,jQuery,浏览器,Tomcat)