Java Web是利用Java技术来解决相关Web互联网领域的技术。在进行Java Web应用程序开发的过程中,经常会遇到在页面中本该显示中文的地方却显示的是乱码,究其原因主要是组件与组件之间、组件与浏览器之间、组件与数据库之间等采用的编码方式不统一。在应用程序运行的过程中,只要涉及到中文的地方往往要进行多次字符编码的转换才能正常的显示,而在转换的过程中只要编码方式设置错误就会导致中文乱码。该文主要从Java的常见编码和JSP的运行原理出发,详细的介绍了在进行Java Web开发过程中的常见中文乱码及解决方案。
1 Java中字符编码规则
1) ISO8859-1编码,通常也叫Latin-1或西欧语言,属于单字节编码,最多能表示的字符范围是0~255,应用于英文系列,是Java网络传输使用的标准字符集。
2) GB2312/GBK编码是中国国家标准汉字信息交换编码,专门用来表示汉字,GBK是对GB2312的扩充,采用双字节编码,可以同时兼容繁体字和简体字,而GB2312只能表示简体字,GBK是兼容GB2312编码的。
3) Unicode编码,可以用来表示所有语言的字符,属于最统一的编码[8]。使用的是定长的双字节或四字节进行的编码,为每个字符设定唯一的二进制编码。但该编码不兼容ISO8859-1编码,也不兼容任何编码。Unicode编码可以满足跨语言、跨平台进行文本转换及处理的要求,又称为万国码。
4) UTF-8编码[1],
当操作系统是简体中文时,默认的编码都是采用GBK,编译时采用GBK编码方式读取转化成Unicode,再转换成UTF-8写入到Class文件中。此文件在原来系统中访问不会出现中文乱码问题,但当该文件移植到英文系统中后,此时就会出现中文乱码问题。原因是Java采用UTF-8读取Class文件,再将Class文件转换成Unicode,但此时无法采用系统默认编码ISO8859-1对编码进行解码。同理,如果把在英文操作系统下编译的文件移植到中文系统下去访问,也会出现中文乱码问题。通过源文件的编译和反编译可以发现,在编码转换的过程中,都是通过Unicode编码作为中介来完成的,此时造成乱码的根本原因是使用错误的字符集解码字节流或者将给定的字节流用错误的字符集解码。
3 JSP运行原理
3.1 JSP运行过程
当客户端向服务器发出JSP请求时,服务器接收到请求后就将请求交个应用服务器,此时应用服务器就创建request和response对象并判断JSP对象是否存在,如果不存在再判断该JSP文件是否存在,如果不存在就产生404错误,如果请求的文件存在,此时就将JSP文件转换成Java文件并编译Java文件,加载类、实例化、初始化,将request和response作为参数传递个service()方法,该方法执行结果是HTML代码,service执行完毕后就删除request、response,应用服务器将结果返回给Web服务器,Web服务器把结果返回给浏览器,浏览器进行解析显示;如果请求的对象存在,就直接将request和response作为参数传递个service方法,继续向下执行,其运行过程如图2所示:
6 结束语
在进行Java web开发的过程中,在JSP页面中只要将charset、pageEncoding、过滤器中的编码都设置一致并支持中文编码, 此时无论以何种提交方式,都可以解决中文乱码问题,从而提高了开发效率,降低了程序乱码的出现概率。
参考文献:
[1] 杨金花.JSP技术中文乱码的原因及解决方法[J].电子设计工程,2011,19(1):25-27.
[2] 张言辉.J2EE平台下汉字乱码问题分析及解决[J].电脑知识与技术,2010,6(12):3019-3021.
.电脑知识与技术,2012,8(1):62-63.
[4] 仁平红.Java中文乱码问题研究[J].计算机技术与发展,2013,23(3):118-120.
[5] 彭立.Tomcat环境下JSP中文乱码问题的解决[J].湖南第一师范学院学报,2011,11(3):128-132.
.重庆三峡学院学报,2011,27(3):60-64.
.计算机与数字工程,2012,278(12):126-129.