在java开发中,经常会遇到乱码问题(包括中文乱码、其他国家语言文字乱码等),怎么样才能花最小的代价来解决这个问题呢?下面就将提供一种方式来彻底解决这个麻烦。(本方法已经在很多项目中使用,希望能给那些为乱码困扰的朋友带来帮助!)
方法分成以下3个步骤(请放心,每一步都非常简单)
1. 首先将开发项目(如在Eclipse中创建的项目)的设置成UTF-8编码方式(如下图)。这一点在开始一个新的项目的时候尤其重要,目前的项目基本上都使用UTF-8编码了。
2. 确保项目内的所有开发文件都是UTF-8编码的。这里的开发文件主要指:java,jsp,html,js,css,xml类型等开发涉及到的文件,当然 图片文件就不用了,貌似没有UTF-8的图形文件。其中的java,js,css,xml类型文件,只要文件的编码方式为UTF-8就可以了。而jsp文 件则还需要在文件内容中设置如下:
Html代码
<%@ page contentType=“text/html;charset=UTF-8″%>
…
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8″>
…
<%@ page contentType="text/html;charset=UTF-8"%>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...另外html文件还需要在文件内容中设置:
…
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8″>
…
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...对jsp文件和html文件要特别注意,大多数时候遇到乱码是因为粗心没有进行UTF-8编码或者文件内容没有设置对造成的。遇到乱码问题一般先检查相应的文件编码和内容是否符合要求。
如果原来不是UTF-8编码的可以用文本工具进行转换,包括最简单的记事本也可以将打开的文件另存为UTF-8编码,当然可以用UltraEdit工具转换[菜单:文件-转换-ASCII转UTF-8]更加方便。
3. 在项目应用中加一个编码虑镜。编码虑镜的代码(很简单的)具体如下:
Java代码
/*
* Created on 2005-11-6
* Author stephen
* Email zhoujianqiang AT gmail DOT com
* CopyRight(C)2005-2008 , All rights reserved.
*/
package com.soft4j.filter;
import java.io.IOException;
import javax.servlet.*;
public class CharsetFilter implements Filter {
protected String encoding = null;// ///要制定的编码,在web.xml中配置
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request.getCharacterEncoding() == null) {
String encoding = getEncoding();// //得到指定的编码名字
if (encoding != null)
request.setCharacterEncoding(encoding);// //设置request的编码
}
chain.doFilter(request, response);// /有机会执行下一个filter
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter(“encoding”);// /得到在web.xml中配置的编码
}
protected String getEncoding() {
return (this.encoding);// /得到指定的编码
}
}
/*
* Created on 2005-11-6
* Author stephen
* Email zhoujianqiang AT gmail DOT com
* CopyRight(C)2005-2008 , All rights reserved.
*/
package com.soft4j.filter;
import java.io.IOException;
import javax.servlet.*;
public class CharsetFilter implements Filter {
protected String encoding = null;// ///要制定的编码,在web.xml中配置
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request.getCharacterEncoding() == null) {
String encoding = getEncoding();// //得到指定的编码名字
if (encoding != null)
request.setCharacterEncoding(encoding);// //设置request的编码
}
chain.doFilter(request, response);// /有机会执行下一个filter
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");// /得到在web.xml中配置的编码
}
protected String getEncoding() {
return (this.encoding);// /得到指定的编码
}
}
编码虑镜的使用方法:只要在项目的web.xml文件的开头中加入如下的配置参数就可以了:
Xml代码
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.soft4j.filter.CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.soft4j.filter.CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样能确保所有出入项目的调用都是UTF-8编码的。
经过上面的3个步骤后,你的java项目就不必再受到乱码的困扰了,当然在实际的开发中,由于使用一些第3方的开源组件可能会遇到乱码问题,不 过,大部分的问题都是由于开源组件造成的,不必怀疑自己的项目。只要对开源组件中的编码方式进行设置或者作相应的修改,一般就能解决问题。
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/2952
分享到:
相关推荐
在Java编程中,读取和写入TXT文件时,经常遇到中文乱码的问题。这是因为Java默认的字符编码可能与TXT文件的实际编码不一致,导致字符无法正确解析。本篇文章将深入探讨这个问题,并提供完整的源码解决方案。 首先,...
### MySQL + JDBC 彻底解决中文乱码问题 #### 一、引言 在使用 MySQL 数据库进行数据存储时,可能会遇到中文字符显示为乱码的问题。这种情况通常出现在数据库连接参数配置不当或数据库本身的字符集设置不正确时。...
在IT行业中,网络请求是应用程序与服务器交互的重要方式,而HttpClient是Java开发中常用的一款HTTP客户端库。然而,处理HTTP响应时,特别是涉及到文本内容时,乱码问题常常困扰着开发者。本文将深入探讨如何使用...
在Web开发过程中,经常遇到的一个问题是中文或其它非ASCII字符的乱码问题。这种现象通常出现在浏览器接收的数据与实际编码格式不匹配时。解决此类问题的一种常见方法是使用过滤器(Filter)对请求进行预处理,以确保...
在开发基于Java的JSP应用程序时,遇到中文乱码问题是很常见的困扰。这是因为Java的核心和class文件基于Unicode编码,这为跨平台提供了便利,但也引入了处理中文字符时可能出现的问题。乱码问题主要分为两大类:Java...
本文将详细介绍如何彻底解决MySQL运行SQL语句中文乱码的问题。 #### 一、理解乱码产生的原因 在探讨解决方案之前,我们先来了解一下为什么会出现乱码问题。乱码主要是由于字符集不匹配导致的。当MySQL处理中文字符...
在Java开发中,文件上传和下载是常见的功能需求,尤其在Web应用中。这个压缩包提供的组建源码,专门针对中文乱码问题进行了优化,基于jspsmartupload库进行了改进,确保了在处理文件名时不会出现编码问题,从而提高...
本文将深入探讨FCKeditor编辑器中的中文乱码问题及其彻底解决方案。 中文乱码问题通常源于字符编码不一致。在计算机系统中,不同的程序或文件可能使用不同的字符编码,如ASCII、GBK、UTF-8等。当这些程序或文件互相...
本文将深入探讨Java中解决中文乱码的终极策略,帮助开发者彻底摆脱这个困扰。 首先,我们要理解Java中的字符编码体系。Java采用Unicode作为其内部编码,这使得它能够处理世界上几乎所有的字符集。然而,当与外部...
本文将详细介绍如何在Servlet与JSP中彻底解决中文乱码问题,并给出具体的解决方案。 #### 二、中文乱码的原因分析 中文乱码主要由以下几个原因引起: 1. **服务器端编码设置不正确**:如果服务器端的字符集设置与...
本文将深入探讨如何彻底解决这一问题,包括自动判断文档编码类型以及进行转码操作。 首先,我们需要理解为什么会出现中文乱码。在计算机中,文本是以特定编码格式存储的,例如ASCII、GBK、UTF-8等。不同的编码格式...
通过上述步骤,我们可以在Java Web开发中(使用JSP和Servlet)彻底解决乱码问题,确保数据从输入到输出的整个过程中都使用一致的UTF-8编码。这不仅提高了数据处理的准确性,也提升了用户体验,特别是在涉及多语言...
这对于开发者来说是一个很大的优势,可以深入理解其工作原理,以便在遇到问题时能快速定位并解决问题。 6. **直接引用**:描述中提到,只需将这个jar包引入项目,即可使用其功能。这意味着HTMLParser.jar的API设计...
对于部分情况,仅修改Eclipse的编码设置可能不足以彻底解决问题,尤其是在使用Struts框架时,资源属性文件在被读取到JSP页面上时仍可能出现乱码。这是因为Java在处理这些文件时可能会进行两次编码,导致乱码问题依旧...
本篇文章将深入探讨如何彻底解决Spring MVC中的中文乱码问题,以便于开发者能够流畅地处理中文数据。 首先,当用户通过表单提交中文参数时,可能会遇到乱码问题。确保JSP页面的编码设置为UTF-8,例如在页面头部添加...
要彻底解决中文乱码问题,首先需要了解其产生的原因。在Web环境中,数据从浏览器到服务器的传输过程中涉及多个环节,包括但不限于: 1. **客户端编码**:浏览器提交表单时,默认会按照HTML文档声明的编码格式对数据...
在IT行业中,尤其是在Web开发领域,Tomcat是一个广泛使用的开源应用服务器,主要处理Java Servlet和JSP(JavaServer Pages)应用程序。然而,在实际操作中,开发者时常会遇到字符编码问题,尤其是在Tomcat 5这样的较...
在Java Web开发中,使用SmartUpload组件上传附件时,可能会遇到中文文件名乱码的问题。这个问题通常涉及到字符编码的处理,特别是在不同的操作系统和Web服务器环境下。以下是对彻底解决该问题的详细解析: 首先,...