http发送数据的解码与编码

1.一般情况下,url中目录中的中文按照utf-8进行编码,“中”的utf-8编码为“%E4%B8%AD”。

2.get方法的参数按照计算机的系统语言进行编码,中文按照GBK,“中”的GBK编码为“%D6%D0”;日文环境按照“shift-jis”,“中”的编码为“%92%86”

3.post方式的参数,会放到http正文当中,按照utf-8形式编码,“中”的utf-8编码为“%E4%B8%AD”。

针对一个在后台的解码:

1.加入在后台中的匹配路径中含有中文,那么要将路径中的中文“中”按照正确的格式解码,解决方案可也是:  

在tomcat的server.xml的Connector节点下加入URIEncoding="utf-8",这样就能匹配到中文的路径。  

一般在路径中不会包含中文,另外在tomcat中加入URIEncoding="utf-8",会影响所有的工程,所以这种方法一般不会使用(本人基于兴趣看了下)。

2.对get参数进行正确的解码。  

在tomcat中没有加入URIEncoding="utf-8",tomcat默认按照iso-8859-1解码,所以要想得到正确的中文参数,按如下方式,先解码再按照正确方式编码:  

System.out.println(new String(request.getParameter("username").getBytes("iso-8859-1"),"参数编码"));  

参数编码是自己计算机系统环境的编码。    

问题出现了:如果加入URIEncoding="utf-8",理论上参数会按照utf-8进行解码,但是还会出现乱码:  

System.out.println(new String(request.getParameter("username").getBytes("utf-8"),"参数编码"));  

现在还没解决掉,望大家帮忙。

3.post方式的解码   URIEncoding="utf-8"的设置对post没有影响,所以post参数在后台还是按照iso-8859-1来进行解码的:  

String s = new String(t.getParameter("username").getBytes("ISO-8859-1"),"utf-8");  

这样就能输出中文。    

如果不想每次都这么转换,在spring中可以使用filter来进行。filter对post起作用,对get不起作用。

 <filter>   

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

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

  <init-param>  

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

  <param-value>utf-8</param-value>  

 </init-param>  

</filter>

 <filter-mapping>  

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

  <servlet-name>rest</servlet-name>

 </filter-mapping>

  System.out.println(t.getParameter("username"));

  也可以自己写过滤器,但是不推荐,因为自己写和使用现有的是一样的,没那个必要。

暂时先写这么多,把自己的学习记录下,上面还有没解决的问题,望大家指导下,感激不尽!

posted on 2012-11-19 10:53  zzjjian333  阅读(2918)  评论(0编辑  收藏  举报