Java/JSP中文乱码问题解决心得
自从接触java和jsp以来,就不断与java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。
一、java中文问题的由来
java的内核和class文件是基于unicode的,这使java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,java和jsp文件本身编译时产生的乱码问题和java程序于其他媒介交互产生的乱码问题。
首先java(包括jsp)源文件中很可能包含有中文,而java和jsp源文件的保存方式是基于字节流的,如果java和jsp编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding gbk或-ecoding gb2312编译;对于jsp,在文件头加上<%@ page contenttype="text/html;charset=gbk"%>或<%@ page contenttype="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
本文要重点讨论的是第二类乱码,即java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:
从页面form提交数据到java程序 byte->char
从java程序到页面显示 char?>byte
从数据库到java程序 byte?>char
从java程序到数据库 char?>byte
从文件到java程序 byte->char
从java程序到文件 char->byte
从流到java程序 byte->char
从java程序到流 char->byte
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法
前面已经提到了java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(java或jsp自身产生的乱码请参看第一部分)。
1、jsp与页面参数之间的乱码
jsp获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setcharacterencoding("gbk")或request.setcharacterencoding("gb2312")。
如果在jsp将变量输出到页面时出现了乱码,可以通过设置response.setcontenttype("text/html;charset=gbk")或response.setcontenttype("text/html;charset=gb2312")解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:
<filter>
<filter-name>characterencodingfilter</filter-name>
<filter-class>net.vschool.web.characterencodingfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterencodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
characterencodingfilter.java:
public class characterencodingfilter implements filter
{
protected string encoding = "GBK";
public void init(filterconfig filterconfig) throws servletexception
{
this.encoding = filterconfig.getinitparameter("encoding");
}
public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception
{
request.setcharacterencoding(encoding);
response.setcontenttype("text/html;charset="+encoding);
chain.dofilter(request, response);
}
}
2、java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如microsoft的sqlserver驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/webcldb?useunicode=true&characterencoding=gbk。
3、java与文件/流之间的乱码
java读写文件最常用的类是fileinputstream/fileoutputstream和filereader/filewriter。其中fileinputstream和fileoutputstream是基于字节流的,常用于读写二进制文... ... ... ...
来源:http://www.91duoduo.com/java_msg.asp?id=fblkidmz1del4o@
分享到:
相关推荐
解决乱码的各种方法总结,包括数据库的解决方案,个人觉得比较详细有使用价值
自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。
java 中出现的乱码问题,包括jsp乱码,数据传输乱码等
基于jsp后台java解决ajax异步传输中文乱码问题.
JSP中文问题解决办法,JSP页面传值,数据库等的中文乱码解决办法
JAVA/JSP方面通用的英文参考文献及翻译
JSP中文乱码问题解决总结,个人收集,一次放出,减少大家的查找时间。
java/jsp生成静态页面html/htm
大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。
java/jsp 实现二级级联菜单 可以 从数据库里取出数据进行级联
JAVA/JSP上传下载模块,功能实用,代码完整,支持多图片上存和下载。
中文乱码问题解决&&乱码问题解决&&中文乱码问题解决&&乱码问题解决
本文档详细地介绍了如何解决MySql数据库中的中文乱码问题,此问题的解决将极大地帮助基于MySql的PHP编程、JSP编程、Servlet编程及C#或.Net编程!测试过的开发平台包括 Netbeans和Eclipse。测试过的服务器包括Apache、...
在利用Servlet/JSP技术开发java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决...
JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码
JAVA / JSP 版网站内容管理系统
网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到的是乱码问题的解决 网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到...
java/jsp读取Excel的数据, 并返回List(jar包请搜索“读取Excel的数据jar poi”)
JAVA/JSP入门学习