最近在做一个wap项目,由于各种手机的原因,要求wap网站对 字符编码、session、cookie,已经转向要求比较严格
虽然严格按照web项目中的编码设置方式设置字符编码,但在wap项目中,还是很有可能出现问题(部分页面没问题,部分有问题,很是烦)
以下就wap项目字符编码终极解决方案:
tomcat 目录下 conf/server.xml文件
字符编码解决方案 :<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" />
注意参数 useBodyEncodingForURI
在默认情况下,该参数为false。useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
另外还可以设置URIEncoding="指定编码",但不是很好的方法,如果tomcat有多个项目,每个项目编码不同,则行不通。
URIEncoding和useBodyEncodingForURI区别是,URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
所以对于URL提交的数据和表单中GET方式提交的数据,可以修改URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中request.setCharacterEncoding参数设置成浏览器编码。
说明:
设置编码的方式可以有:
1. <%@ page language="java" pageEncoding="UTF-8"%>
2. <%@ page contentType="text/vnd.wap.wml;charset=utf-8"%>
<?xml version="1.0" encoding="UTF-8"?>
3. <%
request.setCharacterEncoding("UTF-8");
%>
4. <% response.setCharacterEncoding("UTF-8");%>
解释
1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
注意:如果JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",会引起JSP内部定义的字符串为乱码。
2、contentType="text/vnd.wap.wml;charset=utf-8"的作用是指定对服务器响应进行重新编码的编码。
3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。