MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 关于字符编码与解码的几个小问题,希望大家一起讨论

关于字符编码与解码的几个小问题,希望大家一起讨论(8)

www.MyException.Cn  网友分享于:2015-08-27  浏览:29次


<html>

 <head>

<title>中文问题</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 </head>

</html>

第四,

request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8

response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。

1,post提交的数据: 

程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器. 

<filter> 

<filter-name>encodingFilter</filter-name> 

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 

<init-param> 

<param-name>encoding</param-name> 

<param-value>UTF8</param-value> 

</init-param> 

<init-param> 

<param-name>forceEncoding</param-name> 

<param-value>true</param-value> 

</init-param> 

</filter> 

<filter-mapping> 

<filter-name>encodingFilter</filter-name> 

<url-pattern>*.html</url-pattern> 

</filter-mapping> 

<filter-mapping> 

<filter-name>encodingFilter</filter-name> 

<url-pattern>*.jsp</url-pattern> 

</filter-mapping> 

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8. 

特别注意: 

a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding); 

在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放. 

b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/> 

这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过. 

如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/) 

2,get提交的数据: 

两种情况: 

a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用 

new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 

取出 

b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的 

content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中: 

<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> 

<Connector port="8080" 

maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 

enableLookups="false" redirectPort="8443" acceptCount="100" 

debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" 

disableUploadTimeout="true" /> 

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容. 

如果content="text/html; charset=GBK",需用 

new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 

取出,其他情况类似. 

总结: 

1,所有页面使用utf8编码, 

2,服务器加上过滤器, 

3,server.xml中不要使用 

<Valve className="org.apache.catalina.valves.RequestDumperValve"/> 

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有