分析乱码出现的情况:

        (1)开发环境 比如:eclipse中的window -->> Preferences -->>General-->>……

        (2)页面设置

        (3)服务器的配置 比如:tomcat的编码设置

        (4)数据库乱码 比如:mySqL数据库中



表单提交后action获取到的中文为乱码排查步骤(提交的是action的属性):

1、需要在struts.xml中做i18n配置

<constant name="struts.i18n.encoding" value="utf-8" />

2、配置后action中打印是否能够获取到中文,如果获取不到中文,在action中进行转码,如下:

String name = new String(project.getName().getBytes("ISO-8859-1"),"UTF-8");

或者写一个类定义转换字符编码的方法如下:

    public static String convert(String str){

       try {

           byte[] bytes = str.getBytes("ISO-8859-1");

           return new String(bytes,"UTF-8");

       catch (UnsupportedEncodingException e) {

           e.printStackTrace();

           return str;

       }

    }

使用时:

String 转换后的字符串 = 类名.conert(要转换编码的字符串);

Action属性名.set方法(转换后的字符串)

Eg: String result = Chinese.convert(project.getName());

    project.setName(result);

3、检查myeclipse的编码格式:

中文乱码问题

4action调用dao的方法,DAO方法内部在插入前获取到插入的信息,中文能正常先生,但插入后数据库显示乱码,抛开数据库格式不是UTF-8的可能,用工具插入中文数据正常,用Myeclipse插入数据库中文时,显示乱码:

中文乱码问题


原因是:数据库连接时与工具连接的编码不一样导致失败的,在连接数据库时添加编码格式为UTF-8:

jdbc:MySQL://192.168.190.7:3306/struts2?useUnicode=true&characterEncoding=UTF-8


5. 在tomcat的配置文件夹下的servce.xml中的
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    加如下一句话:URIEncoding = "utf-8",放到最后就ok了!


request经过struts处理后默认encoding是iso8859-1,  要纠正这个问题要赶在struts的黑手之前 ,建立filter,
在ActionServlet之前拦截*.do,转换编码
 
解决Struts乱码问题 
a) 配置一个Filter过滤器,加入request.setCharacterEncoding("UTF-8"); 
b) 写一个Servlet继承自ActionServlet在doGet,doPost方法中加入request.setCharacterEncoding("UTF-8"); 
i. 修改web.xml,把ActionServlet改成自己的类 
c) 利用自定义的RequestProceor类中的processPreprocess,加入request.setCharacterEncoding("UTF-8"); 


a) get/post 方式乱码解决方案: 
    i. Tomcat默认在5以后get和post提交的解决不一样。 
    ii. Post---> 
      1. 提交页面设置contentType="text/html;charset=utf-8"; 
      2. 接收页面设置request.setCharacterEncoding("utf-8"),显示时也设置          contentType="text/html;charset=utf-8"; 
3. Struts1默认ISO-8859-1,所以我们需要人工设置乱码解决。参见四 
iii. Get 
1. 默认URL地址提交的是ISO-8859-1的编码。即使做了上面的处理,也不行。 
2. 修改tomcat/conf/server.xml 
a)     <Connector port="80" protocol="HTTP/1.1" 
b)               connectionTimeout="20000" 
c)               redirectPort="8443" URIEncoding="UTF-8"/>



相关文章: