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");   

解决方案 »

  1.   

    ....
    jsp部分 html部分 
    如: 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />如果连接了数据库, 最好把数据也考虑在内,.....
      

  2.   

    可是我遇到我的问题很奇怪,都设成了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]
      

  3.   

    TO:l402674012非常感谢您,昨天的乱码困扰了我一天一夜。百度N次之后偶遇高人l402674012。
    恍然大悟。这个是我见过最全面的解决方案了!!!!!再次感谢...
    我所用到的是 楼主的 (后记二) 百试不厌!!!!
      

  4.   

    数据库连接之后我不知道,不过,如果没有连接数据库的话,可以在struts.xml中进行配置: <constant name="struts.i18n.encoding" value="GBK"></constant>,我用的是GBK,对于传递的参数还是可以解析成为中文的。不过这个是仅限于对struts2.1.7及以上版本有效