APP下载

JavaWEB开发中的中文乱码问题解决方法

2018-12-18张学诚

电脑知识与技术 2018年27期
关键词:乱码解码编码

张学诚

摘要:在Java web开发中,处理中文字符时经常会出现乱码问题。该文从 Java Web工程字符编码理论出发,介绍了java Web程序开发中常用的字符编码集,分析出现中文乱码的原因,并给出解决方法。

关键词:乱码;编码;解码

中图分类号:TP311 文献标识码: A 文章编号:1009-3044(2018)27-0062-02

Solution of Chinese Messy Code in JavaWeb Development

ZHANG Xue-cheng

(Qufu Normal University Network Infomation Center, Rizhao 276826, China)

Abstract: In the development of Java web, the problem of messy code is often encountered when dealing with Chinese characters. Starting from Java Web engineering character coding theory in this paper, introduces the character encoding set commonly used in Java Web program development,analyzes the cause of chinese garbled code,and then gives the solution.

Key words: Chinese garbled; encoded; decoded

1 背景

Java語言是纯面向对象的语言,具有与平台无关性、较好的安全性、健壮性和提供很多内置的类库等优点。Java支持网络传输与数据库存取、已广泛应用于移动互联网、网络开发平台等领域,越来越成为卓越的开发平台,被广大编程工作者和企业级开发使用,成为移动开发、数据挖掘和大数据等系统开发的首先开发语言。

在Java web开发中,处理中文字符时经常会出现乱码,中文乱码问题经常困扰着开发人员,给软件开发工作带来很多麻烦。产生乱码的主要原因是浏览器与业务组件、业务组件与数据库之间所采用的编码不同,导致程序在调试运行时会在浏览器或数据库中显示乱码。该文分析了java web开发过程中几种产生乱码的情况和原因,并给出了不同情况下解决乱码问题方法。

2 java web编程中常用编码

在Java Web应用开发中,字符编码转换是必要的过程。计算机只能识别二进制数,我们平时用的字母、阿拉伯数字和汉字等,都是通过字符编码以二进制的形式存放在计算机中的。计算机处理字符有编码和解码两个过程,字符存入计算机中转换成二进制数是编码过程,反之,把计算机中的二进制编码显示为字符是解码过程。

在java web编程中经常涉及的字符编码方式有ISO8859-1,UTF-8,Unicode,GB2312,GBK等,不同编码方式有不同的编码规则。

ISO-8859-1编码是单字节编码,向下兼容ASCII,共能表示256个字符,该编码不支持中文。

GBK2312是简体中文的字符集编码,是双字节编码,共包含6763个汉字。而GBK是GBK2312的扩展,兼容GB2312编码,GB2312只能表示简体字, GBK同时兼容繁体字和简体字。

Unicode码扩展自ASCII字元集,使用全16位元字元集,可以用来表示所有语言的字符,属于最统一的编码。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码Unicode字符,用在网页上可以统一页面显示中文简体繁体及其他语言。

3 java web编程编码转换机制

用户从客户端发起一个HTTP请求时,需要先对URL、Parameter、Cookie等数据进行编码,再发送到服务器端。服务器端接收到 HTTP 请求后要分析 HTTP 协议,对其中的 URI、POST(或GET)数据、 Cookie 和表单参数等进行解码。服务器端有时还需要读取数据库中的数据,以及本地或其他网络服务器中的文件,这些数据都可能存在编码问题。当应用程序处理完用户请求的数据后,需要将这些数据再次编码通过网络发送到客户端,再经过浏览器解码,在页面显示。上述过程图1所示。

java web开发中经常用到的软件有java编译器、浏览器、数据库系统、web服务软件和开发工具,在使用这些软件时,了解各种软件的默认编码和如何更改默认编码,才能有效地避免乱码问题。

4 java web编程中乱码问题及解决办法

4.1 Eclipse开发环境编码设置

用Eclipse做java web开发时,为了避免出现中文乱码问题,可以在编写jsp页面时设置默认编码。为了实现中文显示并与国际接轨,一般把Eclipse的编码方式设置为UTF-8,通过以下3个步骤完成设置。

首先,设置jsp面页编码,在window-preferences-General-Content Type-Text-Jsp,设置Default EnCoding为UTF-8。

然后,设置Eclipse工作环境编码,在window-preferences-General-workspace面板中,设置Text file encoding为UTF-8。

最后,设置Jsp文件编码,在window-preferences-Web-JSP Files面板中,设置Encoding的编码为UTF-8。

4.2 jsp页面显示中文编码设置

访问JSP页面时,中文乱码是网页应用开发中较普遍、复杂性较低的一种乱码问题,为了避免出现乱码现象,通常在JSP文件头部添加字符集并指定页面编码格式为UTF-8,代码如下:

<%@ page language="java" contentType="text/html"; charset="UTF-8" PageEncoding="UFT-8" %>

<!DOCTYPE html>

网页题目

另外,需要在tomcat web服务器的配置文件Server.xml的Connecter项中,加入URIEncoding="UTF-8",重新启动tomcat服务。加入的代码如下。

4.3 jsp页面提交信息编码设置

浏览器向服务器提交信息有两种方式,一种是get方式,另一种是post方式。两种方式需要不同的方法解决乱码问题。

用get方式提交信息时,URL与参数的连接形式使用“?参数名1=值1&参数名2=值2…”的方式,提交的数据集为ASCII字符。当表单提交时,浏览器对URL中的非ASCII字符进行URL编码,并以ISO8859-1编码的方式发送给服务器,服务器接收到数据后再对其进行解码。因此,解决get方式提交数据时出现的乱码问题,可以在业务层中通过String类的getBytes方法对传来的参数进行解码,解码语句如下:

New String(request.getParameter("name").getBytes("ISO-8859-1"),"客户编码方式")

用Post方式提交数据时,浏览器也会对提交的数据进行编码,编码的方式由网页中语句设定,tomcat默认为ISO8859-1,为了避免出现乱码,可以在业务层中使用request.setCharacterEncoding("UTF-8或GBK或gb2312")语句来解码。

4.4 页面链接中的乱码问题

在页面上查询或提交某些信息的时候,链接的URL地址中可能包含中文,格式为“网址/中文目录1/中文文件名.jsp”等。在开发和使用中,业务层读到的中文目录名或文件名会有乱码情况。分析原因是,利用URL传递参数时,程序中的编码与浏览器的编码环境有关,也就是说URL中包含中文目录名或中文文件名時,对参数值的编码是根据浏览器的默认编码进行的,编码后传递至后台再进行解码。由于没有进行任何处理,此时请求URL,当URL中存在中文时,就会出现中文乱码问题。

经过研究测试,成功的解决办法是对链接进行编码和解码。编码的关键代码如下。

">链接

对链接地址进行解码的关键代码如下。

java.net.URLDecoder.decode(request.getRequestURI(), "UTF-8");

4.5 mysql数据库的中文编码设置

MySQL数据库默认编码是ISO8859-1。为了避免存取数据时出现中文乱码问题,可以通过修改MySQL的默认编码为UTF-8实现。方法是找到MySQL 安装目录中的my.ini文件。在 client、 mysqld、 mysql、mysql.server和mysqld_safe项下面均加上default-character-set=utf8。另外,还需要在数据库链接URL中使用jdbc:mysql://localhost:3306/db1?useEncode=true&characterEncoding;=UTF8 为连接字符串URL,其中characterEncoding =utf8是关键代码,表示连接对象采用UTF-8编码字符集。

5 结束语

中文乱码问题经常困扰开发人员,给软件开发工作带来很多麻烦。在应用开发中,处理乱码问题,首先要抓住产生乱码的原因,按照浏览器界面、数据接收业务、数据保存、数据读取和处理数据回显给用户的顺序,查找问题出现在哪一步,采取相应的解决办法。

参考文献:

[1] 贾晓芳, 沈泽刚. Java Web应用开发中的常见乱码形式及解决方法[J]. 软件导刊, 2017, 16(4):214-216.

[2] 任宪臻, 梁宏英. JSP页面中文乱码解决方法[J]. 数字技术与应用, 2017(1):154-154, 157.

[3] 周兵. Java Web开发中的中文乱码问题分析及解决方案[J]. 电脑知识与技术, 2014, 10(29):6884-6888.

[通联编辑:;谢媛媛]

猜你喜欢

乱码解码编码
《解码万吨站》
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
Genome and healthcare
炫迈:用神奇乱码勾引你视线
如何解决Tomcat的乱码