您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页Java编程中中文乱码问题的研究及解决方案

Java编程中中文乱码问题的研究及解决方案

来源:化拓教育网
信息 科学 VA ■l j J av.编程中中文乱码问题的研究及解决方案 朱靖华 (湖南娄底职业技术学院湖南娄底417000) 摘要: 简要介绍几种常用的中文字符集,对出现乱码问题的三种情况进行分析和处理,并给出相应的解决方法。 关键词: 字符编码:Java Web开发:中文乱码 中图分类号:TP3文献标识码:A文章编号:1671--7597(201O)0320080--01 0引富 Java最大的特性是与平台的无关性及开发环境的多样性。字符串被 Java应用程序转化之前,是根据操作系统默认的编码方式编码。Java语言内 部采用Unicode编码,它是定长双字节编码,即任何符号都用两个字节表 示。在Java程序运行时,就有一个从Unicode编码到对应操作系统及浏览器 支持的编码格式转换问题,若此过程有一步不对就会出现中文乱码的问题。 1 Java Web开发中文乱码甸墨及解决方法 出现乱码三种主要情况是:页面显示乱码、用户提交的数据是乱码、 数据库中的数据是乱码。下面就这三种情况讨论其解决的方案,其支持的 环境是J2EE5.0,服务器为Tomcat5.5.16,数据库为MYSQL5.0。 1.1页面显示乱码 页面上显示乱码的现象是:当访问某个JSp或者Servlet产生的页面的 时候,页面上本来应该显示中文信息的地方变成乱码。 这时首先要分析乱码的来源。乱码的来源可能有两种情况,一种是浏 览器显示不正确,另一种情况是后台在动态生成页面的时候,其内容就是 乱码。所以,首先要做的是查看页面的源文件,看看里面的中文到底是不 是乱码。如果不是乱码,那么说明是浏览器没有正确地解析页面的编码, 否则是由于后台处理造成的。 对于第一种情况,只需要设置JSp或者Servlet的contentType属性即 可。对于JSP中的设置使用的是page指令,将其代码设置为: <%@page contentType= text/html;charset:gb23l2 %> 对于Servlet生成的页面,需要在输出页面之前调用response的 setcontentType()方法。其代码形式如下: response.setC0ntentType( text/html:charset=gb2312 ); 另外,在所生成的HTML文件的头部最好加入下面的内容: <meta http—equiv。 content-type content= text/html:charset =gb2312 > 若页面本身的内容就是乱码这种情况,一般只出现在动态生成内容的 那一部分。要通过源代码进一步地查找乱码产生的根源。这时数据的来源 也有两种情况,一种是从数据库中取出来的数据,另一种是接收的来自页 面提交的数据。下面分别进行分析和处理。 1.2用户提交的数据是乱码 这种情况的表现是通过request(用户请求)对象取得用户提交的中 文信息后,输出到控制台后是乱码。这种情况的原因在于request对浏览器 提交的数据的解码方式不正确。可以单独采用request的setcharacterEnco ding()方法进行处理,但如果页面众多,每个都进行处理会很麻烦。这 里,可以通过Fiiter(过滤器)将所有的request的编码都进行设置。 下列程序代码就是用来设置request编码的Fi]ter。 public void doFi1ter(Serv1etRequest request,ServletResponse response,FilterChain chain) throws lOException, Serv1etException { //判断是否需要进行编码的设置 if(!ignorel I(request.getcharacterEncoding0==nul1)) ( //得到配置文件中的编码类型 String encoding=se1ectEncoding(request): if(encoding!=nul1) request.setCharacterEncoding(encoding): ) chain.doFilter(request,response): } 1 3数据库中的数据是乱码 这种情况多发生在向数据库写入数据的时候,偶尔也有可能出现数据 库中的内容是正确的(通过数据库本身的工具可以正确地读取数据),但 查询出来的结果是乱码。这种情况下,首先要检查执行的S。L语句是否正 确,也就是将SQL语句输出到控制台后看其所包含的中文字符是否为乱码。 如果是,需要找到其根源。否则应该是数据库自身的设置问题。 由于这类问题,没有一个通用的解决方法,在这里就以MySQI 5.O为 例,解决中文乱码问题采取的方法进行介绍。 1)修改MySQL的配置文件。打开<MYSQLHOME>\my.init文件,把 [mysqld]区的语句default-character-set=latinl修改为default—charact er—set=gbk,在[client]区增2 ̄default—character—Set=gbk。修改后,数 据库默认支持的编码格式就被改成了gbk编码。 2)在向表中插人中文时,先把中文字符编码转换为Iatinl编码,然 后再插人表中,可通过下面代码实现: String str=new String( 大家好! .GetBytes( gb2312 ), IS088 59—1 ): String sql= INSERT INTO Test VALUES( +str+ , :Stmt.execut EUpdate(sq1); 在从数据库中读取数据时,再将latinl编码的字符转换为汉字字符, 可通过下面代码实现: String X=new String((r8.getString( title )).getBytes( IS08859 1 ), gb2312 ); 2结束语 为了避免Java Web应用程序开发过程中出现乱码,首先要清楚乱码出 现的根源在哪,按照在显示用户界面、接收用户数据、保存到数据库、从 数据库读取数据和将数据库中的数据显示给用户的顺序,逐步地查找,然 后再采取相应的对策。本文所讨论的几种解决方案,基本解决了各种情况 下的中文乱码问题。 注:本文系娄底职业技术学院科研资助项目阶段性成果(08ZFO06) 参考文献: [1]姜志强,Java语言程序设计[M3.北京:电子工业出版社,2007. [2]张洪伟,Tomcat Web开发及整合应用[M].北京:清华大学出版社, 2006. [3]包竹苇、李淼、张建,Java网络传输中字符编码问题的研究,计算机 工程与应用,2007.4. [4](美)Many Hal1、Larry Brown,Servlet与JSP核心编程(第2版) [伽.赵学良译,北京:清华大学出版社,2004. 作者简介: 朱靖华(1978一),女,汉族,湖南双峰县人,讲师,高级程序员,湖南 大学研究生,研究方向:软件工程、计算机应用技术。 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务