解决GET提交中文乱码有关问题

解决GET提交中文乱码问题

今天同事在做一个手机网站的后台,用GET方式提交参数时,碰到了中文乱码的问题,Tomcat服务器和页面都设置了编码方式是UTF-8,也用了过滤器,还是出现乱码。
无奈只有用java API的两个类来进行编码与解码,URLEncoder:HTML格式编码的工具类,它能将String转换成
application/x-www-form-urlencoded MIME格式;URLDecoder:HTML格式解码的工具类,它能将String从
application/x-www-form-urlencoded MIME格式解码。
由于页面是采用velocity页面模板技术做的,所以需要在页面对传递的中文参数进行编码。
先写一个工具类:ChineseHandler

public class ChineseHandler {
 //将字符窜编码
 public static String getAfterEncodedContent(String content) {
  String newContent = "";
  try {
   newContent = URLEncoder.encode(content, "UTF-8");
  } catch(UnsupportedEncodingException e) {
   newContent = "";
  }
  return newContent;
 }

 //将编码后的字符窜解码
 public static String getAfterDecodedContent(String content) {
  String newContent = "";
  try {
   newContent = URLDecoder.decode(content, "UTF-8");
  } catch(UnsupportedEncodingException e) {
   newContent = "";
  }
  return newContent;
 }
}

 然后写一个配置文件:暂时命名为toolbox.xml

<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
 <xhtml>true</xhtml>
 <tool> 
  <key>chineseHandler</key> 
  <scope>application</scope> 
  <class>com.association.util.ChineseHandler</class> 
 </tool>
</toolbox>

 再然后再web.xml文件中作velocity的配置:

<!-- velocity -->
  <servlet>
    <servlet-name>velocity</servlet-name>
    <servlet-class>
     org.apache.velocity.tools.view.servlet.VelocityViewServlet
    </servlet-class>
    <!--这里初始化上面的配置文件,这样我们在velocity的页面中就可以直接使用我们开始定义的编码解码工具类(ChineseHandler)了,-->
    <init-param>
      <param-name>org.apache.velocity.toolbox</param-name>
      <param-value>/WEB-INF/toolbox.xml</param-value>
    </init-param>
  </servlet>
   <servlet-mapping>
    <servlet-name>velocity</servlet-name>
    <url-pattern>*.vm</url-pattern>
  </servlet-mapping>

 这样,我们在velocity的页面中就可以这样使用了:

<a href="xxxxxxxxxxxx?keyword=$!chineseHandler.getAfterEncodedContent('中文你好')" />

 这时,你的浏览器地址栏上是不是显示了提交的路径和一串%和字母,这样既看不到提交的具体内容,
也很好地解决了中文乱码问题,这时在后台(Servlet或Strust)获得提交的字符窜参数,再调用上面
的工具类的getAfterDecodedContent方法,把字符窜解码,这样就OK了。
如果你的页面是JSP,那更好办,直接

<a href="xxxxxxxxxxxx?keyword=<% java.net.URLEncoder.encode('中文你好', 'UTF-8')" %> />