`
walsh
  • 浏览: 431496 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java WEB开发中的中文乱码问题解决之终极之道 - 概要篇

阅读更多
本文转载地址http://www.lifevv.com/java/doc/20080229211915719.html仅供收藏

每一个JAVA WEB开发者都会碰到乱码问题。本文阐述了JAVA WEB开发中乱码的完全解决方法。
JAVA中,一个WEB应用从构成部分来看无非分3部分:
  1. JSP
  2. JAVA程序(业务逻辑)
  3. 数据库

要解决乱码问题,也从这3部分入手。

其实,我们的目标很明确,第一、保证显示中文时不为乱码;第二、保证保存到数据库里的数据不为乱码

怎么样实现上面2个目标呢?让我们从数据的输入/输出的角度来分析。一个典型的用户请求的过程为:
1)浏览器接收用户输入
2)用户输入的数据-〉JAVA程序
3)JAVA程序对数据进行处理,保存到数据库(需要保存时)
4)从数据库取出数据,返回给浏览器

原则上,如果我们能保证在上述阶段中的数据编码都采用同一个编码方式的话,就应该不会产生乱码。怎么样把它们的编码方式统一起来呢?可以通过以下几个步骤实现:

1、用Filter把用户的输入数据统一编码后再传送给JAVA程序
1) Filter可以用Tomcat提供的SetCharacterEncodingFilter.class,也可以使用如下代码自己做一个SetCharacterEncodingFilter:

public class SetCharacterEncodingFilter   
    implements Filter   
{   
  
    protected String encoding;   
    protected FilterConfig filterConfig;   
    protected boolean ignore;   
       
    /**  
     * Constructor  
     *   
     */  
    public SetCharacterEncodingFilter()   
    {   
        encoding = null;   
        filterConfig = null;   
        ignore = true;   
    }   
  
    /**  
     * @see javax.servlet.Filter#destroy()  
     */  
    public void destroy()   
    {   
        encoding = null;   
        filterConfig = null;   
    }   
  
    /**  
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)  
     */  
    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);   
    }   
  
    /**  
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)  
     */  
    public void init(FilterConfig filterConfig)   
        throws ServletException   
    {   
        this.filterConfig = filterConfig;   
        encoding = filterConfig.getInitParameter("encoding");   
        String value = filterConfig.getInitParameter("ignore");   
        if(value == null)   
            ignore = true;   
        else  
        if(value.equalsIgnoreCase("true"))   
            ignore = true;   
        else  
        if(value.equalsIgnoreCase("yes"))   
            ignore = true;   
        else  
            ignore = false;   
    }   
  
    /**  
     * @param request  
     * @return  
     */  
    protected String selectEncoding(ServletRequest request)   
    {   
        return encoding;   
    }   
}


2) web.xml里设置:
<filter>   
    <filter-name>SetEncoding</filter-name>   
    <filter-class>包名.SetCharacterEncodingFilter</filter-class>   
    <init-param>   
        <param-name>encoding</param-name>   
        <param-value>UTF-8</param-value>   
    </init-param>   
 </filter>   
...   
  
 <filter-mapping>   
    <filter-name>SetEncoding</filter-name>   
    <url-pattern>/*</url-pattern>   
 </filter-mapping> 


如果定义后编码还有问题,注意filter-mapping在web.xml中的定义顺序。

2、 数据库采用跟HTML一样的编码。
数据库编码设置为utf-8

3、JSP里明确指定编码方式,告诉编译器采用我们指定的编码对JSP加以编译。
JSP文件的开头加上:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

4、使用HTML<meta/>标签告诉浏览器使用指定的编码
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

5、 统一资源文件(比如消息等定义文件)的编码方式。并在打包之前用转换成ASCII码。用ant工具的情况下,可以执行以下方法加以转换:

<native2ascii encoding="utf-8" src="资源文件所在路径" dest="${classes.dir}"  includes="**/*.properties" />

以上范例假设统一使用utf-8编码。你可以根据你的实际情况使用适合你的编码。
分享到:
评论

相关推荐

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

    在Java Web开发中,中文乱码问题一直是开发人员面临的常见问题之一。中文乱码通常是由于在字符编码转换过程中,字符集不一致或设置不当所导致。为了解决这一问题,首先需要了解Java Web工程字符编码的基本理论,包括...

    java web开发解决乱码问题

    本篇文章将详细介绍在Java Web开发中解决乱码问题的方法。 #### 二、乱码产生的原因 乱码主要由以下几种情况引起: 1. **页面本身的编码与浏览器解析编码不一致**:例如页面实际编码为GBK,但浏览器默认按照ISO-...

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

    在Java Web开发中,中文乱码问题是一个常见的困扰,尤其对于使用Servlet和JSP技术的开发者来说。乱码问题的产生主要源于字符编码的不一致性,即在Web组件之间、Web组件与浏览器、以及Web组件与数据库之间的字符集...

    Java Web开发中的乱码问题.pdf

    Java Web开发中的乱码问题.pdf

    java中文乱码之解决URL中文乱码问题的方法

    在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...

    java中文乱码问题详解--- java中文乱码问题详解

    ### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...

    java中文乱码解决问题

    JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的表单数据中有中文字符 在...

    Java Web程序开发中字符乱码的原因与解决办法.pdf

    Java Web程序开发中字符乱码的原因与解决办法 字符乱码问题是Java Web程序开发过程中经常遇到的一个问题,它会对用户界面的友好性以及信息的准确传达造成很大的影响。为了解决这个问题,我们首先要了解字符集和字符...

    Java开发中文乱码问题解决

    在Java开发过程中,中文乱码问题是一个常见的困扰,尤其是在处理文本输入输出时。本文将深入探讨这个问题,并提供解决策略。 首先,我们需要理解字符编码的基本概念。字符编码是将字符(如汉字)转换为数字的过程,...

    java+jsp+mysql开发 web项目处理中文乱码问题

    处理 Java+jsp+mysql 开发 web 项目中文乱码问题 在 Java+jsp+mysql 开发 web 项目中,中文乱码问题是一个常见的...通过以上四个方面的解决方法,我们可以完全解决 Java+jsp+mysql 开发 web 项目中的中文乱码问题。

    配置web-xml解决中文乱码问题.pdf

    本文主要讨论了在 Web 开发中遇到的中文乱码问题,并提供了一些解决方案。首先,需要确定中文乱码问题不是由浏览器引起的,然后讨论了 Tomcat 服务器配置和数据库 bean 配置中的一些解决方案。 一、浏览器配置问题 ...

    Java Web项目开发中的中文乱码问题与对策.pdf

    Java Web项目开发中,中文乱码问题是一个常见但棘手的困扰,主要涉及到字符编码和解码的过程。在计算机系统中,数据以二进制形式存储,中文字符需要经过编码转换为字节序列才能存储。编码是将字符转化为字节的过程,...

    Java Web开发中的乱码问题.zip

    在Java Web开发中,乱码问题是一个常见的挑战,它涉及到字符编码、数据传输以及环境配置等多个方面。本文将深入探讨这些问题及其解决方案。 首先,我们需要理解什么是乱码。乱码通常出现在字符集不匹配的情况下,即...

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

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

    Java生成pdf文件,解决中文乱码问题.pdf

    Java 生成 PDF 文件,解决中文乱码问题是 Java 编程中常见的问题。解决这个问题的关键是正确地设置中文字体,以避免乱码问题。本文将通过一个完整的示例代码,详细讲解如何使用 iText 库生成 PDF 文件,解决中文乱码...

    关于Java+Web技术开发中中文乱码问题的深入探讨.pdf

    中文乱码问题在 Java Web 技术开发中的深入探讨 在 Java Web 技术开发中,中文乱码问题是一个常见的问题,影响了开发者的工作效率和项目的稳定性。本文将深入探讨中文乱码问题的成因、解决方法和预防措施,帮助...

    java中文乱码问题解决

    Java中文乱码问题是Java开发中常见的问题,尤其是在Web开发中,乱码问题会导致页面显示混乱,影响用户体验。解决乱码问题需要了解编码的基本原理和各种编码格式的区别。 编码的原因可以总结为两点:计算机中存储...

    Java Web开发中的中文乱码问题分析及解决方案.pdf

    Java Web开发中的中文乱码问题是一个常见的困扰,尤其是在处理用户输入和数据显示时。问题的核心在于不同组件和环境之间编码方式的不一致。本文将深入探讨Java Web的编码机制,JSP运行原理,以及如何解决常见的乱码...

Global site tag (gtag.js) - Google Analytics