关于分页传中文参数乱码的问题,急!

winkey4986 2011-08-14 10:29:37
小弟正在做一个查询
<s:form action="SearchAllPassedResource.action" method="post">
<input type="text" name="selectname" />
<s:select size="1" name="selectmethod" list="#{'1':'按资源名称查找','2':'按关键字查找','3':'按资源类别查找','4':'按上传人姓名查找'}" theme="simple" />
<input name="Submit4" type="submit" value="搜 索" />
</s:form>
其中查询条件"selectname"可能为中文,小弟疑惑的事,我这样表单直接提交,就算有中文,也可以将条件"selectname"提交到后台action,并且不出现乱码。但是如果查询结果进行分页:
<a href="<s:url value="SearchAllPassedResource1.action">
<s:param name="currentPage" value="currentPage"/>
<s:param name="pagerMethod" value="'next'"/>
<s:param name="selectmethod" value="%{selectmethod}"/>
<s:param name="selectname" value="%{selectname}"/>
</s:url>">下一页</a>
将分页的参数再传到后台的action后就会出现中文乱码。我现在的解决方法是后台写两个函数:SearchAllPassedResource和SearchAllPassedResource1分别处理表单提交的和分页传值的中文参数,后者加入编码转换:this.selectname = new String(selectname.getBytes("ISO8859_1"), "UTF-8");注:如果将此代码写在第一个函数里,那原本正常的中文参数反而会变成乱码!请问各位高手,有没有方法使我能用一个函数去处理两个不同情况(中文乱码和不乱码)呢?
...全文
289 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
winkey4986 2011-09-05
谢谢各位!
回复
dada_fangfang 2011-08-18
web项目,需要注意可能会出现乱码的情况:
1.页面编码和服务器编码不一致,可以分别在tomcat下面的service.xml设置URIEncoding="UTF-8",
页面<%@ page pageEncoding="UTF-8"%>
2.此外还有你的程序编码,也设置成相同的编码

struts2的编码可以采用默认

以上方法还不行,来找我
回复
matengyu036912 2011-08-18
楼主用的是struts2吧,乱码问题在struts.xml中加个常量配置不就成了,最好不要在程序中转码,因为转码一多,程序就乱了.
常量配置如下:
<constant name="struts.i18n.encoding" value="utf-8"></constant>

我写过的程序基本上没怎么出现乱码,就是因为编码统一,eclipse上文件编码全用utf-8.
tomcat配置server.xml:URIEncoding=utf-8//可以在URL中传输中文
使用servlet时,先加request.setCharacter...("utf-8");response.setContext...("text/html;charset=utf-8");


总之,只要你各项编码统一,要么全用GBK,要么全用utf-8(推荐),根本不用在程序中转换
回复
saintforever 2011-08-18
关注中,我也要用到
回复
wenjie4892543 2011-08-18
a.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
  然后在接收参数页面使用如下语句接收
  keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
  乱码的核心问题还是字符集编码问题,只要掌握了这一点,一般的乱码问题都可以解决。
回复
山鹰 2011-08-17
写个编码过滤器
回复
仙人长 2011-08-17
jsp文件本身的编码格式
回复
softroad 2011-08-17
js encodeURI(url);
回复
failure_lee 2011-08-17
过滤器+注意数据库的编码(比如这样写:jdbc.url=jdbc:mysql://localhost:3306/onlineexamsystem?characterEncoding=gbk)
回复
winkey4986 2011-08-17
求高手解释~
回复
分页也是用表单提交 就可以了
回复
飓风zj 2011-08-17
你可以js控制表单提交 到下一页啊
回复
wby13579 2011-08-17
服务器改了编码没有
tomcat server.xml加上
URIEncoding='utf-8'
websphere
“服务器”-->应用程序服务器,找到自己应用使用的服务器。
WS6有不同,注意。
找到“服务器基础结构”,展开其下的“Java 和进程管理”,然后进入“进程定义”。
进入后找到“其它属性”-->“Java 虚拟机”:
将“Java 虚拟机”设置为:-Dfile.encoding=GBK
回复
winkey4986 2011-08-15
过滤器我也加了,都是utf-8,还是不行!
回复
火光闪耀 2011-08-14
我也遇到过这问题,最终没有解决,郁闷啊。
回复
愚公移码 2011-08-14
你看一下web.xml中的编码是不是和你页面设置的编码保持一致,这个很重要的。
回复
winkey4986 2011-08-14
[Quote=引用 5 楼 bao110908 的回复:]
不会 Struts 2,我只能告诉你 JSTL 是怎么做的!


HTML code
<c:url value="test.do" var="testUrl">
<c:param name="name" value="中文" />
</c:url>
<a href="${testUrl}">test</a>


需要在 Tomcat server.xml 中两个 Conne……
[/Quote]
虽然看不懂jstl,还是谢谢你,另外,想说一句,你的徽章好多!
回复
不会 Struts 2,我只能告诉你 JSTL 是怎么做的!

<c:url value="test.do" var="testUrl">
<c:param name="name" value="中文" />
</c:url>
<a href="${testUrl}">test</a>


需要在 Tomcat server.xml 中两个 Connector 加上 URIEncoding="UTF-8",Servlet Filter 加上:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
回复
winkey4986 2011-08-14
[Quote=引用 1 楼 bao110908 的回复:]
URL 规范并不允许在 URL 中传递非 ASCII 参数,因此就有种称为 URL 编码的东西
[/Quote]
那我该怎么做?
回复
winkey4986 2011-08-14
[Quote=引用 2 楼 acherat 的回复:]
传入参数都转码下。
[/Quote]
表单传入的是正常的,url传入的才会乱码,正常传入的如果也转码,反而会乱码
回复
加载更多回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2011-08-14 10:29
社区公告
暂无公告