文档章节

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

思维80
 思维80
发布于 2015/05/24 15:18
字数 1349
阅读 24
收藏 0

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

 

 

引言 
  Java最大的特性是与平台的无关性及开发环境的多样性。字符串被Java应用程序转化之前,是根据操作系统默认的编码方式编码。Java语言内部采用Unicode编码,它是定长双字节编码,即任何符号都用两个字节表示。在Java程序运行时,就有一个从Unicode编码到对应操作系统及浏览器支持的编码格式转换问题,若此过程有一步不对就会出现中文乱码的问题。 
  1 Java Web开发中文乱码问题及解决方法 
  出现乱码三种主要情况是:页面显示乱码、用户提交的数据是乱码、数据库中的数据是乱码。下面就这三种情况讨论其解决的方案,其支持的环境是J2EE5.0,服务器为Tomcat5.5.16,数据库为MYSQL5.0。 
  1.1 页面显示乱码 
  页面上显示乱码的现象是:当访问某个JSP或者Servlet产生的页面的时候,页面上本来应该显示中文信息的地方变成乱码。 
  这时首先要分析乱码的来源。乱码的来源可能有两种情况,一种是浏览器显示不正确,另一种情况是后台在动态生成页面的时候,其内容就是乱码。所以,首先要做的是查看页面的源文件,看看里面的中文到底是不是乱码。如果不是乱码,那么说明是浏览器没有正确地解析页面的编码,否则是由于后台处理造成的。 
  对于第一种情况,只需要设置JSP或者ServletcontentType属性即可。对于JSP中的设置使用的是page指令,将其代码设置为
   
  对于Servlet生成的页面,需要在输出页面之前调用responsesetContentType()方法。其代码形式如下
  response.setContentType("text/html;charset=gb2312"); 
  另外,在所生成的HTML文件的头部最好加入下面的内容
   
  若页面本身的内容就是乱码这种情况,一般只出现在动态生成内容的那一部分。要通过源代码进一步地查找乱码产生的根源。这时数据的来源也有两种情况,一种是从数据库中取出来的数据,另一种是接收的来自页面提交的数据。下面分别进行分析和处理。 
  1.2 用户提交的数据是乱码 
  这种情况的表现是通过request(用户请求)对象取得用户提交的中文信息后,输出到控制台后是乱码。这种情况的原因在于request对浏览器提交的数据的解码方式不正确。可以单独采用requestsetCharacterEnco 
  ding()方法进行处理,但如果页面众多,每个都进行处理会很麻烦。这里,可以通过Filter(过滤器)将所有的request的编码都进行设置。 
  下列程序代码就是用来设置request编码的Filter。 
  public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) 
   throwsIOException,ServletException 
  
   // 判断是否需要进行编码的设置 
   if(!ignore||(request.getCharacterEncoding()==null)) 
  
  // 得到配置文件中的编码类型 
   String encoding=selectEncoding(request); 
   if(encoding!=null) 
  request.setCharacterEncoding(encoding); 
  
  chain.doFilter(request,response); 
  
  1.3 数据库中的数据是乱码 
  这种情况多发生在向数据库写入数据的时候,偶尔也有可能出现数据库中的内容是正确的(通过数据库本身的工具可以正确地读取数据),但查询出来的结果是乱码。这种情况下,首先要检查执行的SQL语句是否正确,也就是将SQL语句输出到控制台后看其所包含的中文字符是否为乱码。如果是,需要找到其根源。否则应该是数据库自身的设置问题。 
  由于这类问题,没有一个通用的解决方法,在这里就以MySQI 5.0为例,解决中文乱码问题采取的方法进行介绍。 
  1)修改MySQL的配置文件。打开\my.init文件,[mysqld]区的语句default-character-set=latinl修改为default-charact 
  er-set=gbk,[client]区增加default-character-Set=gbk。修改后,数据库默认支持的编码格式就被改成了gbk编码。 
  2)在向表中插人中文时,先把中文字符编码转换为latin1编码,然后再插人表中,可通过下面代码实现
  String str= new String("大家好! ".GetBytes("gb2312"),"ISO88 
  59-1"); 
  String sql="INSERT INTO Test VALUES(" +str+",";Stmt.execut 
  EUpdate(sq1); 
  在从数据库中读取数据时,再将latinl编码的字符转换为汉字字符,可通过下面代码实现
  String X=new String((r8.getString("title")).getBytes("ISO8859 
  -1"),"gb2312"); 
  结束语 
  为了避免Java Web应用程序开发过程中出现乱码,首先要清楚乱码出现的根源在哪,按照在显示用户界面、接收用户数据、保存到数据库、从数据库读取数据和将数据库中的数据显示给用户的顺序,逐步地查找,然后再采取相应的对策。本文所讨论的几种解决方案,基本解决了各种情况下的中文乱码问题。 

本文转载自:http://blog.csdn.net/u012151556/article/details/12322901

思维80
粉丝 8
博文 111
码字总数 42366
作品 0
西安
程序员
私信 提问
jqGrid中文问题

jqGrid是一个很好用的jQuery插件。功能很强大。最近因为公司的项目对此作了一些研究。 首先碰到的都是讨厌的中文乱码问题。 在网上搜索了一些资料,说要设置Servlet返回的JSON内容格式为gb2...

yonge
2009/12/02
3K
0
JForum 的错误页面中文乱码的问题

JForum 这个论坛系统在处理中文的时候,还是多多少少有一些问题。 特别是当程序出错的时候,JForum 的错误页面就会显示乱码,包括页面上的所有带中文提示的信息都变成黑块块了。 经过研究 JF...

红薯
2009/12/26
1K
0
Tomcat中文乱码问题的原理和解决方法

Tomcat中文乱码问题的原理和解决方法   自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。   一、Java中文问题的由...

孙斐
2013/02/26
253
0
MenuItem 显示中文乱码问题解决方案

MenuItem 显示中文乱码问题解决方案 今天在使用Java做系统托盘图标(TrayIcon),需要为其增加一个右键弹出菜单(PopupMenu),在使用菜单项(MenuItem)时,遇到了一个非常痛苦的事情:中文乱码~...

Java编程思想
2013/10/17
518
0
一例 jvm file.encoding 属性引起的 MapReduce/HBase 乱码问题

1、问题: 最近在往 HBase 写中文的时候,发现 hbase 查出来的数据会有部分中文乱码了,而部分中文又是正常的,按理来说,一般的乱码问题要么全乱,要么不乱。考虑到出现中文的地方都是来源于...

大数据之路
2013/08/28
3.4K
4

没有更多内容

加载失败,请刷新页面

加载更多

数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
33分钟前
6
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
42分钟前
5
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0
8086汇编基础 start 程序入口标签的示例

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
今天
4
0
uni app 零基础小白到项目实战2

<template> <scroll-view v-for="(card, index) in list" :key="index"> <view v-for =(item, itemIndex) in card"> {{item.value}}</view> </scroll-view></template> GraceUi va......

达达前端小酒馆
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部