javer夜未眠

人生就像旅行:重要的不是到达目的地,而是沿途的风景、以及欣赏风景的心情!

原创 彻底治疗乱码顽症——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编码进行“翻译”!

  END!Good Luck!

发表于 @ 2005年08月10日 17:30:00|评论(loading...)

新一篇: 系统分析、设计——你合格吗? | 旧一篇: Log4j——系统必备“武器”之一

用户操作
[即时聊天] [发私信] [加为好友]
Javer.Leo
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
Javer.Leo的公告

Wayne Rooney(鲁尼)

 球员号码∶曼联 8号
 出生日期∶1985-10-24
身高/体重∶180cm/78kg
 场上位置∶前锋

文章分类
收藏
J2EE站点收藏
ApacheSoftware
BEA dev2dev 在线
BlogJava.net
IBM DeveloperWorks
JAVA开源大全
Java视线论坛
JDK在线中文文档
Linux伊甸园
sourceforge.net
休闲娱乐好去处
几米漫画
在线看电视
曼联官方中文网
版纳春茗茶
西安音乐台(在线直播)
非官方曼联中文网
友情连接
ggl的blog
JWHan的Blog
tony的blog
寂寞如雪
翻译网站
键者天行
存档
软件项目交易
Csdn Blog version 3.1a
Copyright © Javer.Leo