Angelo Lee's Blog
This is my kingdom .If i don't fight for it ,who will ?

声明:本文原创,转载请注明出处。

 

测试环境:服务器tomcat6.0,开发工具Myeclipse6.5,架构struts1.2。已经配置了字符过滤器初始值gb2312。


例子:传值 <form name="loginForm" action="login.do?name=卡卡 " method="post">
注意:method="post"中post不能改用get。因为get只支持ascii编码。测试时用get报空指针异常。
方法1:如果你用的是tomcat。则可以指定tomcat配置文件server.xml中Connector标签属性URIEncoding="gb2312"。
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="gb2312"/>

属性useBodyEncodingForURI="true" 可以加也可以不加。
action中简单的取值即可:String name=request.getParameter("name").trim();

注解:其实你如果不在SERVER.XML里面配置uriencoding=gb2312的话,系统默认的URL的传递是TOMCAT默认的iso的格式。

方法2:取值:String name=request.getParameter("name").trim();
       解码:name=new String(name.getBytes("ISO-8859-1"),"GBK");

要进行异常处理:

try {
 name=new String(name.getBytes("ISO-8859-1"),"GBK");
     } catch (UnsupportedEncodingException e) {
  e.printStackTrace();
     }
注解:其中第一个参数Iso-8859-1指的是现在的编码方式,而第二个参数是要转换成的目标编码方式,因为网页往往默认编码是Iso-8859-1,而汉字简体编码是gb2312,简繁体是gbk。

注解:方法1和方法2支持汉字中间有空格,空格在地址栏中显示%20,http://localhost:8080/meander/jsp/login.do?name=卡%20卡,action中空格被原样打出。

 

方法3:页面上对URL编码:String name="卡卡";
      <form name="loginForm" action="login.do?name=<%=java.net.URLEncoder.encode(name, "gb2312")%> " method="post">
      后台action解码:
      String name=request.getParameter("name").trim();
      name=java.net.URLDecoder.decode(name, "gb2312");

注解:方法3在测试时没有成功,不知道什么原因。编码方式gb2312,utf-8和Iso-8859-1都测试了,没有成功。

 

总结:如果用Tomcat服务器,对于这样的问题,通常在Tomcat的server.xml配置URIEncoding="UTF-8"来处理GET方法里的汉字数据,
然后在web.xml配置一个SetCharacterEncoding过滤器,来处理POST方法里的汉字数据,然后代码里直接使用request.getParameter()取出来的数据,不用再进行额外的字符集转换操作。
另外,URLEncoding 最好用 UTF-8 转码,当然,用 GB18030/GBK/GB2312 来转码也可以。

posted on 2009-07-16 18:29  Angelo Lee  阅读(300)  评论(0编辑  收藏  举报