声明:本文原创,转载请注明出处。
测试环境:服务器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 来转码也可以。