`
matt.u
  • 浏览: 130260 次
  • 性别: Icon_minigender_1
  • 来自: CQ
社区版块
存档分类
最新评论

WEB应用中文乱码解决(多种方法)

阅读更多
使用 tomcat 时,相信大家都回遇到中文乱码的问题,具体表现为通过表单取得的中文数据为乱码。

一、初级解决方法
通过一番检索后,许多人采用了如下办法,首先对取得字符串按照 iso8859-1 进行解码转换,然后再按照 gb2312 进行编码,最后得到正确的内容。示例代码如下:
String para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");
具体的原因是因为美国人在写 tomcat 时默认使用 iso8859-1 进行编码造成的。
然而,在我们的 servlet 和 jsp 页面中有大量的参数需要进行传递,这样转换的话会带来大量的转换代码,非常不便。

二、入门级解决方法
后来,大家开始写一个过滤器,在取得客户端传过来的参数之前,通过过滤器首先将取得的参数编码设定为 gb2312 ,然后就可以直接使用 getParameter 取得正确的参数了。这个过滤器在 tomcat 的示例代码 jsp-examples 中有详细的使用示例,其中过滤器在web.xml 中的设定如下,示例中使用的是日文的编码,我们只要修改为 gb2312即可。
     <filter>
         <filter-name>Set Character Encoding</filter-name>
         <filter-class>filters.SetCharacterEncodingFilter</filter-class>
         <init-param>
             <param-name>encoding</param-name>
             <param-value>EUC_JP</param-value>
         </init-param>
     </filter>

过滤器的代码如下:
public class SetCharacterEncodingFilter implements Filter {
     // 编码的字符串
     protected String encoding = null;
    // 过滤器的配置
     protected FilterConfig filterConfig = null;
    // 是否忽略客户端的编码
     protected boolean ignore = true;
    // 销毁过滤器
     public void destroy() {
         this.encoding = null;
         this.filterConfig = null;
     }
    // 过滤方法
     public void doFilter(ServletRequest request, ServletResponse response,
                          FilterChain chain)
           throws IOException, ServletException {
         // 如果使用过滤器,忽略客户端的编码,那么使用通过过滤器设定编码
         if (ignore || (request.getCharacterEncoding() == null)) {
             String encoding = selectEncoding(request);
             if (encoding != null)
                 request.setCharacterEncoding(encoding);
         }
         // 传送给下一个过滤器
         chain.doFilter(request, response);
     }
     // 初始化过滤器
     public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;
         this.encoding = filterConfig.getInitParameter("encoding");
         String value = filterConfig.getInitParameter("ignore");
         if (value == null)
             this.ignore = true;
         else if (value.equalsIgnoreCase("true"))
             this.ignore = true;
         else if (value.equalsIgnoreCase("yes"))
             this.ignore = true;
         else
             this.ignore = false;
     }
     // 返回过滤器设定的编码
     protected String selectEncoding(ServletRequest request) {
         return (this.encoding);
     }
}

然而在 tomcat5 中,即使使用过滤器,仍然可能取得乱码,原因何在呢?

三、高级解决方法
这是因为,在 tomcat4 和 tomcat5 中对参数的处理是不一样的,在 tomcat4 中 get 与 post的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的在 tomcat 5 中,为了解决编码问题,tomcat 的作者作了很多努力,具体表现为在 tomcat 的配置文件 server.xml中对 Connector 元素增加了如下的配置参数,专门用来对编码进行直接的配置。
URIEncoding:用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。
什么是 URI 呢?
java doc 的说明中如下说明:URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
也就是说,我们通过 get 方法提交的参数实际上都是通过 uri 提交的,都由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。
useBodyEncodingForURI:使用与 Body 一样的编码来处理 URI, 这个设定是为了与tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post的编码是一样的,所以只要在过滤器中通过request.setCharacterEncoding 设定一次就可以解决 get 与 post的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过 前面的URIEncoding进行处理,对 post 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。

将 useBodyEncodingForURI 设定为真后,就可以通过request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题。
这样,我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题,使用过滤器来解决 post 方法中的问题。
或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ,配合过滤器来解决编码的问题。
在这里,我强烈建议在网站的创作过程中,全程使用 utf-8 编码来彻底解决乱码问题。
具体操作如下:
1、页面内容使用 utf-8 格式保存,在页面中加入 <mete http-equiv="contentType" c>
2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true
3、使用过滤器,过滤器设定编码为 utf-8

分享到:
评论

相关推荐

    Java WEB开发中的中文乱码问题解决方法.pdf

    解决中文乱码的方法通常有以下几种: 1. 设置项目的字符编码:在Web项目的配置文件中,如web.xml中设置字符编码为UTF-8,确保整个项目的字符编码统一。 2. 设置请求和响应编码:在Servlet的doGet和doPost方法中,...

    Java关于中文乱码问题的多种解决方法

    本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中的乱码: 当Java程序读取或写入包含中文字符的文件时,需要设置正确的字符编码。例如,使用`...

    Java Web开发中文乱码问题的研究与解决.pdf

    在Java Web应用开发中,中文乱码问题的出现通常是以下几个环节导致的: 1. 浏览器与服务器交互:当用户通过浏览器提交包含中文的表单数据时,如果浏览器发送的数据编码与服务器接收数据的编码不一致,就会产生乱码...

    详解多种方法解决MYSQ中文乱码

    ### MySQL中文乱码解决方案详析 #### 背景与挑战 ...在实际应用过程中,还需要注意检查并确保整个系统的字符集一致性,包括操作系统、应用程序、Web服务器以及数据库本身,这样才能彻底避免中文乱码问题的发生。

    解决中文乱码问题

    "解决中文乱码问题" 标题解释 解决中文乱码问题是指在使用C#语言读取txt文件时,遇到中文乱码的问题。这种问题在实际开发中非常常见,特别...在ASP.NET框架中,C#语言可以用于开发Web应用程序,并解决中文乱码问题。

    springMVC解决中文乱码

    解决 SpringMVC 中的中文乱码问题可以通过多种方法来实现,包括在 web.xml 文件中配置字符编码、使用注解配置字符编码、使用 CharacterEncodingFilter 或者自定义 Filter 等。这些方法都可以有效地解决中文乱码问题...

    jsp中文乱码问题解决

    解决jsp中文乱码问题的方法有多种,下面我们将讨论几种常见的解决方法。 一、页面中文乱码解决 对于jsp页面中文乱码问题,可以通过修改jsp页面的编码方式来解决。我们可以在jsp页面的开头添加 ”utf-8” %&gt;指令,...

    对Java Web应用开发中的中文乱码问题的研究与解决.pdf

    通过上述方法,可以有效地避免和解决Java Web应用中的中文乱码问题。理解字符编码的工作原理以及在Web开发中的应用,对于排查和修复这类问题至关重要。同时,随着技术的发展,现代Web框架(如Spring Boot)已经提供...

    JSP中文乱码问题解决方法小结

    在IT行业中,尤其是在进行Web开发时,JSP(JavaServer Pages)中文乱码问题是一个常见的困扰。这主要是由于字符编码不一致导致的。以下是一些关键的知识点和解决方法: 1. **JSP页面乱码** 当JSP页面中的中文字符...

    jsp中文乱码的解决方案

    在开发基于Java的Web应用程序时,JSP(Java Server Pages)页面常常会遇到中文乱码的问题。这通常发生在数据的输入、处理或输出阶段,给用户界面带来不便,也增加了开发者的调试难度。本文将深入探讨JSP中文乱码的...

    idea 控制台中文乱码和web项目乱码(csdn)————程序.pdf

    - **设置过滤器**:如果上述方法仍然无法解决问题,可以考虑在Web应用中添加过滤器来处理请求和响应的编码。 3、**设置过滤器** 在Java Web应用中,乱码通常与HTTP请求和响应的编码有关。以下是一些常见的解决方案...

    过滤器解决中文乱码(项目)

    本项目"过滤器解决中文乱码"旨在提供一种有效的方法来处理这个问题。下面将详细介绍这个项目的相关知识点。 首先,我们要了解什么是过滤器(Filter)。在Java Web中,过滤器是Servlet API的一部分,它允许我们在...

    Java中文乱码问题研究.pdf

    4. 使用Unicode编码:使用Unicode编码可以解决Java Web应用程序中的中文乱码问题。例如,可以使用UTF-8编码来解决中文乱码问题。 5. 设置数据库编码:设置数据库编码也可以解决Java Web应用程序中的中文乱码问题。...

    PHP与MySQL Web应用平台中文乱码问题研究.pdf

    在构建PHP与MySQL的Web应用平台时,中文乱码问题是一个常见的困扰。这个问题主要源于字符集的不兼容和转换机制的缺失。字符集是计算机存储和处理文本的基础,特别是对于包含多种语言的环境,如中文,正确选择和配置...

    JSP乱码解决方案

    在开发Java Web应用程序时,JSP(JavaServer Pages)页面的乱码问题是一个常见的困扰。JSP乱码通常发生在字符编码不一致或者处理不当的情况下,这会影响用户界面的显示,导致文字显示为不可读的方块或者特殊字符。...

    Tomcat中文乱码处理方法.docx

    Tomcat中文乱码处理方法是指在使用Tomcat服务器时,遇到中文乱码问题的解决方法。中文乱码是指在网页中显示的中文字符被错误地显示为乱码,影响用户体验和网站的可读性。 第一种解决方法是通过contentType、...

    乱码解决_MYSQL.txt

    解决Web应用表单提交乱码 对于Web应用,当用户通过表单提交数据时,可以通过设置表单的`method`属性为`POST`来避免GET请求导致的乱码问题: ```html ``` 同时,在Servlet或Filter中设置请求编码为UTF-8: ```...

    Web开发中乱码问题的研究与解决.pdf

    ### Web开发中乱码问题的研究与解决 #### 1. 引言 在Web开发过程中,乱码问题一直是困扰开发者的一大难题,尤其是在处理...通过以上方法,可以有效地避免和解决Web开发中的中文乱码问题,提高用户体验和应用质量。

Global site tag (gtag.js) - Google Analytics