本文转载地址http://www.lifevv.com/java/doc/20080229211915719.html仅供收藏
每一个JAVA WEB开发者都会碰到乱码问题。本文阐述了JAVA WEB开发中乱码的完全解决方法。
JAVA中,一个WEB应用从构成部分来看无非分3部分:
- JSP
- JAVA程序(业务逻辑)
- 数据库
要解决乱码问题,也从这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开发中Jsp存储读取MySQL数据中文乱码的问题
Java Web开发中的乱码问题.pdf
介绍解决java web 开发解决中文乱码问题的一般方法
Java Web开发中的乱码问题
java中文乱码问题详解--- java中文乱码问题详
主要为大家分享了介绍了java中文乱码之解决URL中文乱码问题的方法,感兴趣的小伙伴们可以参考一下
在利用Servlet/JSP技术开发java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决...
解决在javaweb开发的过程中遇到的乱码问题,纯属个人在学习中的总结。
Java Web程序开发中字符乱码的原因与解决办法.pdf
从介绍java常用字符编码集入手,详细分析了在java Web开发中产生中文乱码的原因,并针对原因提出了可行性解决方法。
F:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发...
java编码中的中文问题是一个老生常谈的问题了,但一直没有一个清晰的解释,本文作者将通过《java 中文乱码 解决之道》彻底分析、解决java中文乱码问题。
Java关于中文乱码问题的多种解决方法,中文乱码过滤器
Java Web项目开发中的中文乱码问题与对策.pdf
关于Java Web技术开发中中文乱码问题的深入探讨
配置web-xml解决中文乱码问题.pdf
阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...
Java生成pdf文件,解决中文乱码问题.pdf
改文档详细总结了JAVA开发中的各种常见的中文乱码,比如JSP页面的中文乱码,数据库的中文乱码等。