APP下载

Java Web开发中的中文乱码问题分析及解决方案

2014-11-07周兵

电脑知识与技术 2014年29期
关键词:过滤器

周兵

摘要:在进行Java Web开发的过程中,由于采用的编码和解码的方式不统一,经常会出现乱码问题。文中首先介绍了Java Web的编码机制及JSP运行原理,继而阐述了在开发过程中常见的乱码问题及解决方案,最后提出采用过滤器重写getParameter方法,实现了对采用get方式、post方式和URL提交数据的统一解决方案,从而使开发人员更方便的解决乱码问题。

关键词:字符编码;中文乱码; Java Web;过滤器

中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2014)29-6884-05

Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.

Key words: character encoding; Chinese characters; Java Web; filte

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.

[3] 李响,郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术,2012,8(1):62-63.

[4] 仁平红.Java中文乱码问题研究[J].计算机技术与发展,2013,23(3):118-120.

[5] 彭立.Tomcat环境下JSP中文乱码问题的解决[J].湖南第一师范学院学报,2011,11(3):128-132.

[6] 杨玉婷,康厚良.Web应用程序开发中的中文乱码问题讨论[J].重庆三峡学院学报,2011,27(3):60-64.

[7] 李德平.对Java Web应用开发中的中文乱码问题的研究与解决[J].计算机与数字工程,2012,278(12):126-129.

[8] 宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子技术,2013,11(2):5-7.

[9] 习胜丰,戴敏.Java Web中文乱码处理研究[J].湖南城市学院学报,2010,9(19):66-68.

[10] 钱程.浅析JSP网站开发中中文乱码问题[J].科技信息,2009,1(33):65.endprint

摘要:在进行Java Web开发的过程中,由于采用的编码和解码的方式不统一,经常会出现乱码问题。文中首先介绍了Java Web的编码机制及JSP运行原理,继而阐述了在开发过程中常见的乱码问题及解决方案,最后提出采用过滤器重写getParameter方法,实现了对采用get方式、post方式和URL提交数据的统一解决方案,从而使开发人员更方便的解决乱码问题。

关键词:字符编码;中文乱码; Java Web;过滤器

中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2014)29-6884-05

Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.

Key words: character encoding; Chinese characters; Java Web; filte

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.

[3] 李响,郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术,2012,8(1):62-63.

[4] 仁平红.Java中文乱码问题研究[J].计算机技术与发展,2013,23(3):118-120.

[5] 彭立.Tomcat环境下JSP中文乱码问题的解决[J].湖南第一师范学院学报,2011,11(3):128-132.

[6] 杨玉婷,康厚良.Web应用程序开发中的中文乱码问题讨论[J].重庆三峡学院学报,2011,27(3):60-64.

[7] 李德平.对Java Web应用开发中的中文乱码问题的研究与解决[J].计算机与数字工程,2012,278(12):126-129.

[8] 宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子技术,2013,11(2):5-7.

[9] 习胜丰,戴敏.Java Web中文乱码处理研究[J].湖南城市学院学报,2010,9(19):66-68.

[10] 钱程.浅析JSP网站开发中中文乱码问题[J].科技信息,2009,1(33):65.endprint

摘要:在进行Java Web开发的过程中,由于采用的编码和解码的方式不统一,经常会出现乱码问题。文中首先介绍了Java Web的编码机制及JSP运行原理,继而阐述了在开发过程中常见的乱码问题及解决方案,最后提出采用过滤器重写getParameter方法,实现了对采用get方式、post方式和URL提交数据的统一解决方案,从而使开发人员更方便的解决乱码问题。

关键词:字符编码;中文乱码; Java Web;过滤器

中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2014)29-6884-05

Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.

Key words: character encoding; Chinese characters; Java Web; filte

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.

[3] 李响,郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术,2012,8(1):62-63.

[4] 仁平红.Java中文乱码问题研究[J].计算机技术与发展,2013,23(3):118-120.

[5] 彭立.Tomcat环境下JSP中文乱码问题的解决[J].湖南第一师范学院学报,2011,11(3):128-132.

[6] 杨玉婷,康厚良.Web应用程序开发中的中文乱码问题讨论[J].重庆三峡学院学报,2011,27(3):60-64.

[7] 李德平.对Java Web应用开发中的中文乱码问题的研究与解决[J].计算机与数字工程,2012,278(12):126-129.

[8] 宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子技术,2013,11(2):5-7.

[9] 习胜丰,戴敏.Java Web中文乱码处理研究[J].湖南城市学院学报,2010,9(19):66-68.

[10] 钱程.浅析JSP网站开发中中文乱码问题[J].科技信息,2009,1(33):65.endprint

猜你喜欢

过滤器
三步拆卸洋马YH880/1180 收割机变速箱内过滤器
更 正
支持过滤器的REST模型研究与实现
声音过滤器
基于LOGO!的空气过滤器自洁控制系统
HVM膜过滤器管板改造总结