struts2中文参数乱码

goodlucktomyself 2012-01-05 05:37:58
编程环境: tomcat6 + struts2.2.3
页面编码: utf-8
struts.i18n.encoding = UTF-8

问题:当我的url带中文参数时【如:http://localhost:8088/web_project/s?param=高级管理】时,如果是超链接点击过去,则后台获取参数是不会乱码,如果我在地址栏回车,则此时后台获取参数时,则出现乱码
以下方法都行不通,例如:
(1)在tomcat中配置中加上URIEncoding="UTF-8"
(2)过滤器

哪位大哥帮忙看下,这种问题如何解决,拜谢!
...全文
339 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodlucktomyself 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 runffer_yang 的回复:]

你要面对gb18030和utf-8不能互转的字符问题。
[/Quote]
确实会存在一些问题,我也看了下一些关于编码的文章,感觉这个编码问题确实不好整,期待更强悍的编码的诞生,可以解决当前所有国家的编码问题!
Steve 2012-01-10
  • 打赏
  • 举报
回复
你要面对gb18030和utf-8不能互转的字符问题。
goodlucktomyself 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zaichongfu 的回复:]

页面jsp中
name = encodeURI(encodeURI(name));
action中解码
String name = URLDecoder.decode(user.getName(), "utf-8");
我就是这么解决的
[/Quote]
这种方法的确可以,但是由于浏览器不同,中文参数解析后的字符串的不一样,假如我按照你说的那样:
页面jsp中
url = encodeURI(encodeURI(url));
然后在后台action中解码
String name = URLDecoder.decode(user.getName(), "utf-8");
但是还会存在问题:假如我把解析后的url拷贝到其它浏览器(比如火狐)再回车,还会是乱码!

最后我是参照百度对中文参数的做法,发现它好像是GB18030编码,然后我也把我的tomcat编码改成GB18030,所有的页面都改成GB18030编码,同时也对url进行编码,action中解码成utf-8,
结果好像可以达到预期效果:将同一url拷贝至不同浏览器中访问,都不会乱码.

不知道这样处理会有问题不???
qq931226110 2012-01-10
  • 打赏
  • 举报
回复
乱码问题:客户端提交中文,servlet中获取的是乱码:
a:如果是get方式,在tomcat中,在conf/server.xml文件中8080端口的connector元素增加URIEncoding="utf-8"
b:如果是post方式,在servlet中,request.setcharactorEncoding("utf-8");放在request.getparameter之前
servlet相应中文,客户端显示乱码:response.setCharactorEncoding("utf-8");该代码要放在
response.getWriter之前
zaichongfu 2012-01-10
  • 打赏
  • 举报
回复
页面jsp中
name = encodeURI(encodeURI(name));
action中解码
String name = URLDecoder.decode(user.getName(), "utf-8");
我就是这么解决的
goodlucktomyself 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 oyxm0 的回复:]
把web。xml代码贴出来看看
[/Quote]
web.xml配置如下:

<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>*.html</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  • 打赏
  • 举报
回复
不行就先转iso-8859-1,到后台再转回来咯
半个鼠标 2012-01-07
  • 打赏
  • 举报
回复
把web。xml代码贴出来看看
goodlucktomyself 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 runffer_yang 的回复:]

Tomcat在GET时的固有问题,在tomcat配置中加上useBodyEncodingForURI="true",与URIEncoding是同一位置。
记得要重新启动。
[/Quote]
加上了,也还是不起作用,郁闷中....
吴红军 2012-01-05
  • 打赏
  • 举报
回复
楼主,一般我加上过滤器和tomcat加上URIEncoding就可以解决你说的问题,但是不知道你怎么的,就不行了,还有哪里出错了没呢?
Zeus 2012-01-05
  • 打赏
  • 举报
回复
在页面上也用UTF-8的,数据库也用UTF-8
a871737299 2012-01-05
  • 打赏
  • 举报
回复
兄弟,你不会是每天都过来拿分的吧。。。。。
江紫枫 2012-01-05
  • 打赏
  • 举报
回复
看看前台页面中是否设置多个Encoding,只保留一个
ylovep 2012-01-05
  • 打赏
  • 举报
回复
tomcat 编码设置成 URIEncoding="UTF-8"
hsliwei 2012-01-05
  • 打赏
  • 举报
回复
看下JSP编码,是不是统一
绝世酱油瓶 2012-01-05
  • 打赏
  • 举报
回复
在后台将乱码转码、
Steve 2012-01-05
  • 打赏
  • 举报
回复
Tomcat在GET时的固有问题,在tomcat配置中加上useBodyEncodingForURI="true",与URIEncoding是同一位置。
记得要重新启动。

67,518

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧