首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-22 
解决GET提交中文乱码问题今天同事在做一个手机网站的后台,用GET方式提交参数时,碰到了中文乱码的问题,Tomc

解决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')" %> />

热点排行