日期:2014-05-20  浏览次数:20610 次

Struts2 中文参数乱码问题。急!急!
各位高人。我在写一个struts2程序时出现了这样一个问题。我从JSP页面中输入一个中文参数用于数据查询。当我点击查询按钮时传给action的中文参数是正常的。但是我点击翻页按钮时(注明:我做的是分页显示数据的页面)传给action的中文参数是乱码的咯。我的web.xml中的字符过滤器用的是spring中的org.springframework.web.filter.CharacterEncodingFilter。进行过滤,强制转换为GBK。我JSP页面中的页头是<%@ page language="java" contentType="text/html;charset=GBK"%>。但是就是出现乱码。请各位高手帮忙指点一下迷津。
本人想了好久都没想明白。如果是过滤器有问题的话那应该第一传过去的参数也应该是乱码。可第一次又是正常的。偏偏在什么都没改的情况下第二次传过去的参数是乱码。

------解决方案--------------------
你设置断点看看是哪一步开始变成乱码的。通常用post方式提交form数据到servlet都会被过滤器过滤的,不知道是不是这方面的原因。另外,你可以使用tomcat自带的那个过滤器替换spring的试一下,个人建议,可以不采纳哈,呵呵。
------解决方案--------------------

请将你所有的编码改为UTF-8而不是GBK
------解决方案--------------------
你在第二个 action 中把提交的字符串转换编码,
比如 字符串名为 s,s=new String(s.getByte("ISO-8859-1"));
试试。
------解决方案--------------------
探讨
你在第二个 action 中把提交的字符串转换编码,
比如 字符串名为 s,s=new String(s.getByte("ISO-8859-1"));
试试。

------解决方案--------------------
这个涉及到struts2拦截器对中文编码的问题,在表单里提交(POST方式)的中文参数都被自动编码成%3E这样的格式的字符串,我用JavaScript的URL解码函数解码了一下,发现并没有什么反应,很显然不是JavaScript中的URL编码,具体是什么我也不太清楚,不过解决方法倒是有的,就是你的表单发送方式用Get别用Post就好了
------解决方案--------------------
title = new String(title.getBytes("ISO-8859-1"), "UTF-8"); 系统的编码是ISO-8859-1,页面的编码是UTF-8
楼主可以根据自己的情况做一下修改