彻底治疗乱码顽症——J2EE.Web应用中文问题解决方案(转)
来源:互联网 发布:mac激活时间相差20天 编辑:程序博客网 时间:2024/06/05 00:15
对于一个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编码进行“翻译”!
想究其原因、彻底解决这一问题吗?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编码进行“翻译”!
- 彻底治疗乱码顽症——J2EE.Web应用中文问题解决方案(转)
- WEB中文乱码问题解决方案三两点
- JAVA WEB项目中文乱码问题解决方案
- J2EE中文乱码问题解决
- J2EE乱码问题解决方案汇总
- 中文乱码问题解决方案
- 中文乱码问题解决方案
- 中文乱码问题解决方案
- 中文乱码问题解决方案
- 中文乱码问题解决方案
- CentOS 5.5 中文乱码问题解决方案(转)
- Groovy WEB网站中文乱码问题解决方案-过滤器
- JSP中文乱码问题解决方案
- ajaxpro中文乱码问题解决方案
- Ajax中文乱码问题解决方案
- MYSQL中文乱码问题解决方案
- Eclipse中文乱码问题解决方案
- 中文参数乱码问题解决方案
- 在验证模式为Forms的情况下,如何解决自动登录问题. (已解决)
- google 笔试感悟
- 图像模式识别(一)
- 雅虎公司C#笔试题
- 图像模式识别 (二)
- 彻底治疗乱码顽症——J2EE.Web应用中文问题解决方案(转)
- 简单方法控制option被选择问题
- 请求调页
- C语言结构与联合详解
- shawl.qiu c# .net 发邮件用户控件 v1.0
- 你了解图形文件的“格式”吗?
- 有关javascript使用
- c语言常用内存分配函数详解
- 使用 8 位 YUV 格式的视频呈现