`

(转)struts2解决中文乱码

阅读更多

终于在自己的项目中引入struts2了,但一上来就来一个中文乱码的问题。google了半天找了几个不痛不痒的结果,很是不满意。又调试了半天,终于 解决了中文乱码的问题。总结一下,中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。大致的原理是java使用unicode编码-- >window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了 ^_^。解决方法如下:

   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;

        }

   }

分享到:
评论
4 楼 夜游神 2010-10-07  
解决了。web.xml时面 编码过滤器的位置错了。。
3 楼 小男孩 2010-05-12  
  很全面,被乱码折腾死了
2 楼 halk 2008-09-18  
建立一个<struts.properties>
struts.i18n.encoding=gb2312

这样就可以解决中文乱码问题了!

----------------------------------
很多时候是需要显示多国文字的..
1 楼 ljay 2008-07-27  
建立一个<struts.properties>
struts.i18n.encoding=gb2312

这样就可以解决中文乱码问题了!

相关推荐

    Struts2中文乱码问题最终解决方案

    在Struts2的各个版本和不同过滤器设置下,GET方式提交的中文乱码问题仍然存在。一种可行的解决方案是在Tomcat服务器的配置文件`server.xml`中,修改`&lt;Connector&gt;`标签,添加`URIEncoding="UTF-8"`属性。这将强制...

    Struts2.0解决中文乱码

    本文将深入探讨如何在Struts2.0中解决中文乱码问题,确保应用程序能够正确地处理和显示中文字符。 ### Struts2.0中文乱码问题分析 #### 1. 表单提交中文乱码 在Web应用中,表单是用户与服务器交互的主要方式之一...

    struts中文乱码问题解决详细步骤

    解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置Filter** 1. **添加过滤器**:首先,我们需要在Web应用的`web.xml`文件中添加一个`...

    struts1.2 解决中文乱码

    #### 二、解决中文乱码的方法 针对上述问题,下面将详细介绍几种有效的解决方案: ##### 1. 修改请求参数编码 **方案说明:** 通过自定义 RequestProcessor 实现对请求参数的编码转换,确保请求参数能够被正确...

    struts2的中文乱码问题解决

    ### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的挑战。这不仅影响用户体验,还可能导致数据不一致等问题。为了解决这一问题,我们需要理解其背后的原理,并采取...

    struts解决中文乱码问题

    解决中文乱码问题有多种方法。一种是直接进行编码转换。例如,可以创建一个名为`EncodingUtil`的工具类,包含一个将ISO_8859_1编码转换为GBK编码的方法: ```java package util; public class EncodingUtil { ...

    struts 2. 5.2解决中文乱码

    解决中文乱码问题通常涉及以下几个步骤: 1. **配置Web服务器**:如果你使用的是Apache Tomcat,需要在`server.xml`中的`Connector`标签中设置`URIEncoding`属性,指定为UTF-8,例如: ```xml ``` 2. **修改`...

    struts下的汉字乱码问题

    总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...

    奇怪的struts2的中文乱码问题及解决.docx

    本文将深入探讨一个关于Struts2在Internet Explorer(IE)浏览器中出现中文乱码的奇怪问题及其解决方案。 首先,中文乱码问题通常涉及到几个关键因素:数据库编码、开发文件编码和网页的Content-Type编码。在确保这...

    Struts2Action处理中文乱码

    这行代码告诉Struts2框架在处理请求和响应时使用GBK编码,从而解决可能出现的中文乱码问题。不过,需要注意的是,如果你的项目使用的是UTF-8编码,你应该将`value`的值改为`UTF-8`。 方法二:编写自定义过滤器 ...

    Struts2乱码终极解决办法

    ### Struts2乱码终极解决办法 #### 一、引言 在开发基于Struts2框架的应用时,经常遇到的一个问题就是中文乱码。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍如何彻底解决Struts2中的乱码问题,并...

    struts2中文乱码解决Demo

    本DEMO是为了解决Struts2在处理中文输入时可能出现的乱码问题,确保系统能够正确地接收和显示中文字符。 首先,我们要理解乱码产生的原因。在Web应用中,数据的传输通常涉及多种编码方式,如HTTP请求的默认编码通常...

    Struts中文乱码解决方案

    这里我们将详细探讨如何解决 Struts 中的中文乱码问题。 一、在 Action 类中的解决方法: 当在 Action 类中遇到中文乱码问题时,可以使用以下代码进行转换。创建一个静态工具类,如 `Chinese`,并定义一个 `...

    Struts2资源文件在jsp页面中显示乱码解决

    当Struts2应用在JSP页面中尝试加载并显示这些文本时,可能会遇到乱码问题,尤其是在处理中文等非英文字符时更为常见。 乱码问题的根源在于字符编码的不匹配。当资源文件的编码格式与JSP页面或服务器解析时所使用的...

    Struts2下载文件中文乱码处理

    除了以上两种方式外,还可以通过对文件名进行编码转换来解决中文乱码的问题。例如,在获取文件名时,可以进行以下处理: ```java public String getFileName() { if (isIE()) { this.fileName = URLEncoder....

    struts2中文乱码问题

    开发者可以根据项目的具体情况选择合适的方法来解决中文乱码问题。此外,还需要注意编码的一致性,即确保整个项目中所用到的所有地方(包括数据库、文件系统等)都采用相同的编码标准,以避免出现乱码的情况。

    struts2中文乱码

    ### Struts2中文乱码问题解析与解决方案 #### 一、引言 在Web开发过程中,尤其是使用Struts2框架时,中文字符的正确显示是一个常见的挑战。本篇文章将详细介绍Struts2中出现中文乱码的原因及解决方案,帮助开发者更...

    struts2获取参数,解决乱码,跳转

    在这个主题中,我们将深入探讨Struts2如何获取参数、解决乱码问题以及实现页面跳转。 首先,让我们来看看Struts2如何获取HTTP请求中的参数。在Struts2中,我们可以使用Action类来接收和处理请求参数。Action类是...

    解决struts2.1.6+spring+hibernate 中文乱码

    在Struts2项目中,可以通过修改`struts.properties`文件来指定项目的字符编码方式,从而解决中文乱码问题。具体配置如下: ```properties struts.objectFactory = spring struts.i18n.reload=true #struts.locale=...

    struts2.1.6解决乱码 补充

    在Struts2中,表单提交的数据默认使用ISO-8859-1编码,而浏览器默认发送的是UTF-8编码,这就会导致中文显示为乱码。 #### 二、解决方案:使用CharacterEncodingFilter 为了解决这个问题,一种常见的做法是通过过滤...

Global site tag (gtag.js) - Google Analytics