关于struts2中文乱码解决方法

l402674012 2009-01-13 10:28:31
struts2中文乱码解决方法


1. 在struts2里面,最好将所有字符都设成utf-8。 <%@ page contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8" %>1.1 在jsp页面设定字符编码。这边有必有说明的是如果是jsp+java bean+servlet的方案,中文乱码很好解决,统一设成gb2312就可以了。 1.2 使用struts框架字符集不能设成gb2312,要改成utf-8。
 2. 在struts.properties 添加:
struts.devMode=false struts.enable.DynamicMethodInvocation=true struts.i18n.reload=true struts.ui.theme=simple
struts.locale=zh_CN struts.i18n.encoding=UTF-8
struts.serve.static.browserCache=false struts.url.includeParams=none
其中locale、encoding就是字符集的设定了。
3. 在web.xml加个filter
  <!-- zh-cn encoding --> <filter> <filter-name>struts-cleanup</filter-name> <filter-class> org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
  跟上述方法,类似还有在action中设定字符编符.
HttpServletResponse response = null; response = ServletActionContext.getResponse(); request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");


通过上述方法,基本就可以搞定中文乱码的问题了。当然,也有例外(如web server的版本\数据库的版本等等)。象在我的一个项目碰到一个中文乱码,tomcate5.5是会乱码的,而在tomcate6中就不会。这边就涉及到tomcate connector字符的设置了。
<Connector port="80" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

--------------------------------------------------------------------
后记之一:在使用struts2时,仍是遇到一种乱码。后来调试才发现,struts2的web.xml配置是有顺序的。
在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,因为要先调整字符集,然后进入Action。
按照Struts2的API,filter的顺序是 struts-cleanup filter SiteMesh filter FilterDispatcher
--------------------------------------------------------------------
后记之二:这个方法是下下策了,只有在前面的方法都无效时才使用。
在action中直接使用request.getParameter()时;还是出现乱码。原因分析如下:
1、getParameter()是有带字符参数的。例:
String s = (String)request.getParameter("txt").getBytes("iso-8859-1");
2、String也可以带有字符参数。
String(byte[] bytes, String charsetName) 构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。
例:String s = new String("中文","utf-8");
3、综合上述两点,编写一个类来完成此项任务
public class ConvertCharacter{
public String Convert(String s){
String result;
byte[] temp ;
try{
temp = s.getBytes("iso-8859-1");
result = new String(temp,"utf-8");
}
return result;
}
}

request.getParameter乱码的问题
方法一:
通过设置tomcat的配置文件server.xml
Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" uRIEncoding="gbk"/>

方法二:
1: String id=new String(request.getParameter("id").getBytes("ISO8859-1"),"UTF-8");
...全文
4752 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
czp99999 2012-07-30
  • 打赏
  • 举报
回复
可以参考
hao_xuesheng 2012-07-30
  • 打赏
  • 举报
回复
非常感谢楼主!!!!!
lxy15329 2011-05-02
  • 打赏
  • 举报
回复
数据库连接之后我不知道,不过,如果没有连接数据库的话,可以在struts.xml中进行配置: <constant name="struts.i18n.encoding" value="GBK"></constant>,我用的是GBK,对于传递的参数还是可以解析成为中文的。不过这个是仅限于对struts2.1.7及以上版本有效
xulaoban 2011-04-28
  • 打赏
  • 举报
回复
不错不错,参考价值很高。
qkniit 2011-01-26
  • 打赏
  • 举报
回复
UTF-8 才是王道
juanmao1680 2011-01-26
  • 打赏
  • 举报
回复
真是高手啊,谢谢了,方法很详细啊....
seeyoula2011 2010-09-29
  • 打赏
  • 举报
回复
谢谢了 高手啊
Roceys 2010-06-29
  • 打赏
  • 举报
回复
TO:l402674012

非常感谢您,昨天的乱码困扰了我一天一夜。百度N次之后偶遇高人l402674012。
恍然大悟。这个是我见过最全面的解决方案了!!!!!再次感谢...
我所用到的是 楼主的 (后记二) 百试不厌!!!!
jayqean 2010-06-06
  • 打赏
  • 举报
回复
挺不错
LMSAMDAS 2010-06-06
  • 打赏
  • 举报
回复
谢谢了 高手啊
dengxyproxy3 2009-05-13
  • 打赏
  • 举报
回复
可是我遇到我的问题很奇怪,都设成了utf-8,但是传给Action参数的时候,几个中文都能正常显示,就唯独一个“港澳台焦点”显示为“港澳台焦?” 当我当“港澳台焦点”改成“港澳台”后,又显示乱码为“港澳?”
请问这是一个什么情况呢?


时政焦点
[http://news.baidu.com/n?cmd=1&class=shizheng&tn=rss&sub=0]
港澳台焦?
[]
军事焦点
[http://news.baidu.com/n?cmd=1&class=mil&tn=rss&sub=0]
环球视野焦点
[http://news.baidu.com/n?cmd=1&class=hqsy&tn=rss&sub=0]
Englist
[http://englist.baidu.com]
Englist
[http://englist.baidu.com]


pxcong007 2009-01-13
  • 打赏
  • 举报
回复
....
jsp部分 html部分
如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

如果连接了数据库, 最好把数据也考虑在内,

.....
zou_wei_forever 2009-01-13
  • 打赏
  • 举报
回复
mark

67,512

社区成员

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

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