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指令,将其代码设置为:
  
  对于Servlet生成的页面,需要在输出页面之前调用response的setContentType()方法。其代码形式如下:
  response.setContentType("text/html;charset=gb2312");
  另外,在所生成的HTML文件的头部最好加入下面的内容:
  
  若页面本身的内容就是乱码这种情况,一般只出现在动态生成内容的那一部分。要通过源代码进一步地查找乱码产生的根源。这时数据的来源也有两种情况,一种是从数据库中取出来的数据,另一种是接收的来自页面提交的数据。下面分别进行分析和处理。
  1.2 用户提交的数据是乱码
  这种情况的表现是通过request(用户请求)对象取得用户提交的中文信息后,输出到控制台后是乱码。这种情况的原因在于request对浏览器提交的数据的解码方式不正确。可以单独采用request的setCharacterEnco
  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");
  2 结束语
  为了避免Java Web应用程序开发过程中出现乱码,首先要清楚乱码出现的根源在哪,按照在显示用户界面、接收用户数据、保存到数据库、从数据库读取数据和将数据库中的数据显示给用户的顺序,逐步地查找,然后再采取相应的对策。本文所讨论的几种解决方案,基本解决了各种情况下的中文乱码问题。

Java编程中中文乱码问题的研究及解决方案的更多相关文章

  1. 201671010127 2016—2017—2 Java怎样解决Java程序中中文乱码的问题。

    这是本次第二次分享新手在编程中遇到的问题,相信很多Java新手和我一样,在Java编程中会遇到中文乱码的情况,下面我就给大家分享我遇到问题和解决问题的具体过程. 我先用Notepad++写了一个如下的 ...

  2. java开发中中文乱码总结

    1.jsp页面内容显示乱码 这种乱码原因很简单,一般的工具或解码程序对中文字符解析时采用默认的解码方式: <%@ page contentType="text/html; charse ...

  3. 深入剖析Java编程中的中文问题及建议最优解决方法

    摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析 ...

  4. Javaweb编程中的乱码问题

    程序中的乱码问题,主要出现在我们处理中文数据的过程中出现.从浏览器向服务器请求数据,服务器返回的数据在浏览器中显示为乱码.或者是服务器中的java文件用到中文,也有可能会出现乱码.数据库在处理数据的时 ...

  5. java: jsp:param中文乱码

    java: jsp:param中文乱码 假如a.jsp/b.jsp文件中 a.jsp代码: 需要加入:request.setCharacterEncoding("UTF-8")  ...

  6. Java编程中“为了性能”尽量要做到的一些地方

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  7. mysql中中文乱码问题

    作用:约束用来保证数据有效性和完整性 . 定义主键约束 主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)   primary key ...

  8. Java 编程中关于异常处理的 10 个最佳实践

    异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...

  9. Java编程中获取键盘输入实现方法及注意事项

    Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...

随机推荐

  1. 安装LMS记

    LMS学习管理系统,即英文Learning Management System的缩写.中文常用别名:在线学习系统. 尝试安装一款LMS,并进行二次开发. Moodle 首先想到的是Moodle.Moo ...

  2. C#图片压缩类winform

    using System;using System.Collections.Generic;using System.Text;using System.Drawing;using System.Dr ...

  3. springMVC绑定json参数之一

    一.SpringMVC @RequestBody接收Json对象字符串 以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现, ...

  4. oracle 实现 自增主键功能

    转自:https://blog.csdn.net/zxh2075/article/details/78488141 之前有一项工作是将mysql的数据库实现转移到oracle,遇到了自增主键实现的问题 ...

  5. 推荐!Html5精品效果源码分享

    一直在看别人的汇总,看到了一些不错的关于 HTML5内容的源码,我也汇总下分享出来,好东西需要共享!希望可以帮到需要的朋友. 1.劲爆分享:HTML5动感的火焰燃烧动画特效 这又是一款基于HTML5的 ...

  6. Qt Console Application

    代码编译完生成的.o文件(又称对象文件,是可执行文件)和链接.o文件形成的.exe可执行文件都保存在“build-Project-Desktop_Qt_5_8_0_GCC_64bit-Debug”中. ...

  7. linux命令-stty

    一.用途: stty——改变和打印终端行设置 二.参数: 1.打印终端行设置 -a,--all   以人可读的方式打印所有当前设置:-a参数比单独的stty命令输出的终端信息更详细 -g,--save ...

  8. sublime text 侧边栏样式修改

    安装PackageResourceViewer 插件.快捷键 CTRL+SHIFT+P 打开 命令面板,输入 Package Control:Install Package (直接输入PCIP,四个单 ...

  9. C#结构体指针的定义及使用详解(intptr的用法)

    在解析C#结构体指针前,必须知道C#结构体是如何定义的.在c#中同样定义该结构体. C#结构体指针之C#结构体的定义: [StructLayout(LayoutKind.Sequential)] pu ...

  10. fatal: Authentication failed (二)

    一.前言 前面一段时间写了一篇解决 git 上传代码出现的权限验证问题,还是没有很好的解决.现在还了方式,具体步骤如下: 二.操作流程 我们在上传代码到服务器,我们都需要安装 Git 版本控制.在安装 ...