web应用开发中中文乱码问题

web应用中中文乱码问题

在java程序中,出现中文乱码问题的原因的根源在于java程序和其他存储媒介互换数据时,两者编码方案不同。
常见的中文字符编码:

  • GB2312-80
    GB2312是简体汉字标准字符编码方案,是基于区位码设计的。收录了常用的简体汉字、日文平假名及片假名、俄语西里尔字母等字符,不支持繁体汉字和一些生僻字。
  • GBK
    GBK编码是GB2312编码的超集,向下完全兼容GB2312。GBK还收录了汉字部首符号、竖排标点符号等字符,是比较通用的汉字编码方案。
  • Unicode
    每种语言都有自己的编码方案,增加了那些需要支持不同语言的方案的软件的难度,因此制定了一个世界标准,称为Unicode。
  • UTF-8
    UTF-8是用于解决国际上字符的一种多字符编码方案,它对英文采用8位编码,中文使用24位编码,包含全世界所有国家需要用到的字符,它是国际编码,通用型很强。

出现中文乱码问题的种类:

1. JSP页面显示乱码
JSP页面显示乱码是由于页面未设置编码方案,通过页面的page指令的contextType属性和pageEncoding属性以及HTML META标签的charset属性中都指定使用中文编码即可。代码举例如下。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

2. 表单提交中文时出现乱码
JSP获取页面参数时,一般是采用默认的编码方案(ISO8859-1),如果页面参数的编码和页面的编码不一致时,很有肯能出现乱码。如果确定乱码问题是出于此,解决方案如下。

  • 在获取表单数据时,首先使用request的setCharacterEncoding()方法强行设置获取表单数据的编码方案,但是要注意这种方法仅仅适用于表单的method属性为post时。代码举例如下。
//假设页面要获得的参数名称为tname
  request.setCharacterEncoding("UTF-8");
  String topic=request.getParameter("tname");
  • 如果表单的method属性为get方式,使用手动转换的方式,代码举例如下。
//假设页面要获得的参数名称为tname
  String topic=request.getParameter("tname");
  topic=new String(topic.getBytes("ISO-8859-1"),"UTF-8");
  • 变量输出到JSP页面上出现了乱码,通过response的setContentType()方法设置。
response.setContentType("text/html;charset=utf-8");

3. 数据库读取数据显示乱码
当程序向数据库保存信息或者读取数据库的信息时会出现中文乱码现象,要保证数据库和jsp页面的编码一致,建议统一使用utf-8编码方案。本文以mysql为例。
第一步:更改数据库编码方式
首先更改表的编码方式,alter table 表名 default character set utf8;
再更改列的编码方式,alter table 表名 change 列名 列名 数据结构 character set utf-8 ;
第二步:在连接数据库时

//要输入你自己的用户名、密码、数据库名字
 connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/database?user=root&password=root&userUnicode=true&characterEncoding=utf-8");

你可能感兴趣的:(web学习笔记)