JSP中文乱码问题解决办法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JSP中文乱码问题解决办法

当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊处理。

常见的几种字符集编码:

⏹ASCII码:不支持中文

⏹ISO-8859-1:不支持中文

⏹GB2313、GBK:支持中文

⏹Unicode:支持中文

⏹UTF-8:支持中文

在解决JSP中文乱码问题前,弄清以下几点:

(1) windows平台采用的默认字符集编码是:GBK

(2) IE浏览器默认采用UTF-8字符集编码方式发送Http请求。

(3) Tomcat在处理Get请求时,永远采用ISO-8859-1编码;

Tomcat在处理Post请求时,默认采用ISO-8859-1编码;如果进行了如下设置request.setCharacterEncoding(“GBK”),则采用GBK编码。

可以使用如下几种方式解决JSP中文乱码问题。

1、方法一:调用自定义的转换函数

<%@page contentType="text/html;charset=GB2312"%>

<%!

public String getStr(String s) {

String str = s;

try {

byte[] b = str.getBytes("ISO-8859-1");

str = new String(b);

return str;

} catch (Exception e) {

return str;

}

}

%>

使用内置对象request将获取的数据,使用ISO-8859-1进行重新编码,并保存到一个字节数组中,然后调用new String()方法,以GBK方式将这个字节数组构造出一个新的字符串,这个新的字符串就是我们想要的结果。

适用于以下三种情况:

(1) 以Get方式提交表单,提交的数据中包含汉字字符。

(2) 以Post方式提交表单,提交的数据中包含汉字字符。

(3) 在浏览器的地址栏中发出Http请求时,查询字符串中包含汉字字符。

2、方法二:调用request.setCharacterEncoding(“GBK”);

<%@page contentType="text/html;Charset=GB2312"pageEncoding="GBK"%>

<% request.setCharacterEncoding("GB2312"); %>

由于Tomcat服务器处理Get请求或Post请求时,默认采用的编码方式是ISO-8859-1,通过内置对象request的getParameter()方法得到的字符串是以ISO-8859-1转换而来,这是导致乱码产生的原因之一。

为了避免Tomcat以ISO-8859-1的编码方式返回字符串,对于以Post方式提交的表单数据,可以在通过内置对象request获取数据之前,调用request.setCharacterEncoding(“GBK”),明确指定对浏览器发送来的数据进行重新编码(或者称为解码)时,采用的GBK的编码方式。

适用于以下情况:

(1) 以Post方式提交表单,提交的数据中包含汉字字符。

3、在数据库中存储和读取中文数据

在Java编程中,中文字体编码难倒了不少程序员,如果抓住了影响Java中文显示的几个关键因素,问题将迎刃而解。

Java是目前最流行的面向对象的编程语言之一,Java支持UTF-8、ISO-8859-1、GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意总结如下。

影响Java中字体编码正确显示的有几个因素: 1)数据库的连接方式; 2)网页中使用的字体编码; 3)数据库里存放数据的字体编码; 4)Java的缺省字体编码。如果在编程中遇到不能正确显示中文时,要先弄清楚以上几项所使用的字体编码,再分析找出原因,即可解决问题。

众所周知,JSP是Java的一种,和网页有关,而网页也有自己的中文编码系统,所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2,数据库连接驱动是用org.gjt.mm.mysql.Driver,这里主要讨论UTF-8和GBK的显示( GB2312是GBK的一个子集,Java中可以使用GBK来代替GB 系列)。我们先来研究JSP中字体编码问题,下面第一到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别,咱们分别说明,前三点是从读取数据库到显示在网页,后三点是从网页输入数据到存入数据库),第七到第九点针对纯Java的类文件。以下rs表示ResultSet的一个实例,是执行Select 语句之后产生的数据集。

一、数据库连接方式使用UTF-8

在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=

UTF-8,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=

true&characterEncoding=UTF-8,从数据库里读出中文显示在使用GBK的JSP 的网页里,如果数据库里存放的字体编码是UTF-8,在JSP中使用str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1),可以正确显示中文。如果数据库里存放的是GBK数据,那么JSP中也要使用str=new

String(rs.getBytes(1),"GBK")来显示正确的中文。值得注意的是如果页面使用UTF-8,数据库里存放的是UTF-8,也可以用str=new String(rs.getBytes(1),"GBK")

相关文档
最新文档