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