[转载]J2EE.Web应用中文问题解决方案

对于一个Java初学者来说,经常碰到的一个问题恐怕就是中文问题了。其实很正常,我们有几千年的悠久历史嘛,博大精深,岂能是小小的计算机语言所能包容的?呵呵,开个玩笑。但是不可否认的一个事实就是,就算是一个比较有经验的开发人员,也经常面对着屏幕上的乱码而大伤脑筋。

  想究其原因、彻底解决这一问题吗?follow me……

乱码原因
  java内核是unicode的。但Java总是根据操作系统的默认编码字符集来决定字符串的初始编码,而且Java系统的输入和输出的都是采取操作系统的默认编码,而数据库、文件、网络传输中的字节流……采用的编码更是各不相同。所以不可避免的就会出现烦人的乱码问题了。

解决办法
  1、GB2312、GBK、Unicode(UTF8)?
  从字符集的大小比较 GB2312 < GBK < UTF8,很显然,如果我们采用UTF8作为系统编码的话,是不会有错的。而且如果你要考虑国际化的话,UTF8似乎是你唯一的选择
  2、开发和编译代码时指定字符集为UTF-8
  JBuilder和Eclipse都可以在项目属性中设置。
  3、使用过滤器
  编写过滤器
package com.javer.test.language;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
* <p>Title: EncodingFilter</p>
@author javer(QQ:84831612)
@version 1.0
@link http://blog.csdn.net/java008 
*/

public class EncodingFilter
implements Filter
{
FilterConfig config;

public void init(FilterConfig parm1)
throws javax.servlet.ServletException
{
this.config = parm1;
}


public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws java.io.IOException, javax.servlet.ServletException
{
if (req.getCharacterEncoding() == null || !req.getCharacterEncoding().equals("UTF-8"))
{
req.setCharacterEncoding(
"UTF-8");
}

chain.doFilter(req, res);
}


public void destroy()
{
this.config = null;
}

}

在web.xml文件中配置该过滤器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>javer‘s project</display-name>
<filter>
<filter-name>EncodingFilter</filter-name>
<display-name>EncodingFilter</display-name>
<description>对编码进行转换</description>
<filter-class>com.javer.test.language.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

4、在JSP 中进行声明
  在JSP头部声明<%@ page contentType="text/html;charset= UTF-8" %>
  在Jsp的html代码中声明<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5、数据库管理
  一般数据库都可以通过管理设置设定UTF-8
  也可以通过jdbc链接时指定编码参数,如:mysql:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
  6、其它
  其他所有和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。总之,记住一个原则:在所有系统的出入口处都用
        UTF8编码进行“翻译”!

posted on 2007-01-09 21:14 会飞的鱼 阅读(145) 评论(0)  编辑  收藏 所属分类: JSP专栏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

相册

友情链接

开源链接

搜索

最新评论

阅读排行榜

评论排行榜