您的位置:首页 > 运维架构 > Tomcat

关于页面提价中文乱码的问题-全解

2012-03-05 22:51 211 查看
1.关于页面上显示的乱码问题,主要由jsp文件本身的编码和pageEncoding设置的编码共同决定的,也就是说,如果页面本身的编码和pageEncoding所设置的编码一致的话,页面出来肯定就是能正常显示出中文的。不管是同是utf-8,还是unicode。另外需要注意的一点是如果页面本身的编码是ANSI,因为它是一个标准,对应中文系统的编码就是gb2312,也就说ANSI和gb2312是一致的。

2.右键->编码查看到的编码内容指的是JSP头中contentType中charset定义的内容,如contentType="text/html; charset=gb2312"指定的话,那么页面上右键->编码看到的编码内容就是gb2312。这个属性其实就是服务器将编译后的内容发送到页面端时采用的编码。有时候后台往前台返回数据的时候会通过调用 response.setContentType("text/xml;charset=UTF-8");来指定编码方式,这应该是和直接用<%@ page  contentType="text/html;
charset=utf-8" language="java" import="java.sql.*" errorPage="" %>作用是一样的。另外,如果页面上同是还指定了<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">,默认还是以<%@ page  contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage=""
%>里面指定的字符为准的。

3.对于Tomcat提交到后台的内容,编码的方式按提交方式分为get和post。

对于post方式提交:

a)post方式对于链接本身带着后缀的内容,如"**.pfv?aaaaa=中文",Tomcat默认对该后缀用iso-8859-1进行编码(当然我们可以通过增加修改server.xml文件中的URIEncoding="****"来对后缀编码方式进行修改),但是表单内容本身的编码是以contentType中charset设定的编码方式为标准的。举例来说:如果server.xml中没有配置URIEncoding,则默认用iso-8859-1来编码,如果此时页面设置<%@ page contentType="text/html;
charset=GBK" language="java" import="java.sql.*" errorPage="" %>,那么ctrl端要显示正常的字符,需要如下调用:

String aaaaa=request.getParameter("aaaaa");   // aaaaa为页面传过来的参数

String aa=new String(aaaaa.getBytes("iso-8859-1"),"GBK");这意思是说aaaaa是以iso-8859-1进行编码的,取出来后需要转成GBK,因为GBK是它本身的编码字符。

b)对于表单内容,因为post提交是将form表单的内容附在head头信息里的,需要设置request.setCharacterEncoding("***");

所设置的编码只要和contentType中charset设置的一致,那么ctrl端获取诸如request.getParameter("xzqhszxsDm");

的时候肯定就是正确非乱码的值了。如果这两者设置的不一样,比如request.setCharacterEncoding("GBK")而页面上设置的为contentType="text/html; charset=utf-8";那么ctrl端无论怎么取都不会显示正确的,因为提交的数据已经从utf-8转到gbk变成乱码了,所以怎么转都无法转会正常的。

对于sword框架,因为在web.xml中的com.cssnet.platform.baseframe.web.comm.CharacterEncodingFilter过滤器里面设置了默认的编码方式为utf-8,所以jsp页面最开始contentType="text/html; charset=utf-8";一定要设置为utf-8,要不能后台肯定是乱码。

对于get方式提交:

因为该方式提交都是后缀url的,所以编码方式以tomcat配置的URIEncoding为准,默认当然是iso-8859-1.而它本身的方式则是以contentType中charset设定的编码方式为主的,这种方式相比较post,要更简单一点。

总结起来就是说:contentType中的charset编码是针对post提交中的form表单数据而言的,这个编码要和request.setCharacterEncoding(***)中的编码一致,否则肯定是乱码。

而对于get提交和post提交中的参数后缀,其编码方式是由默认的编码(如Tomcat为iso-8859-1)或者自己设定(如Tomcat中server.xml可以自己设定URIEncoding="utf-8").
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息