[zz]谈论MySQL与JSP中文乱码问题的解决方案
2008-07-29 23:06
369 查看
谈论MySQL与JSP中文乱码问题的解决方案
引用MySQL与JSP中文乱码问题的解决方案
今天晚上把MySQL和JSP的中文乱码问题弄了一下。的确要花点时间,参考了不少文章,加上JSP熟悉一点,所以基本顺利,而且把整个原理也搞得比较清楚了。
这里写一点经验之谈,让同行们做个参考,同时有不足之处,欢迎指教。
首先我把问题归结为两个方面:
1.从MySQL数据库中取出中文数据,输出到JSP页面上产生的乱码。
2.从JSP页面的表单输入数据,提交(Submit)后,写到数据库中,然后再从数据库中取出,输出到JSP页面时产生乱码。
先来看第一个问题,因为数据库中取出的字符编码是ISO-8859-1(这是大多数数据库使用的传送字符集),而在JSP页面中要使用的中文字符编码是GB2312或GBK(GBK是对GB2312向上兼容的扩展,所包括的中文字符更多,我这里选用了GBK,要注意的是,选用了GBK就要统一使用,不要用GB2312或其他了,否则也有可能乱码),因此必须要对其进行转换,两个基本方法如下:
//将iso-8859-1编码的字符串转换为GBK编码的字符串,这个方法用来解决第一个问题
new String(isoStr.getBytes("iso-8859-1"), "gbk");
//将GBK编码的字符串转换为iso-8859-1编码的字符串,这个方法是为了解决第二个问题
new String(gbkStr.getBytes("gbk"), "iso-8859-1");
我的一般做法是把这两个方法写在一个JavaBean里,JavaBean是什么在这里我就不多说了。相信很多做过JSP的朋友都知道,具体代码如下:
import java.io.UnsupportedEncodingException;
public class StringConvertor {
//convert the GBK String to ISO String,return ISO String
public static String GbkToIso(String gbkStr)
throws UnsupportedEncodingException {
return new String(gbkStr.getBytes("gbk"), "iso-8859-1");
}
//convert the ISO String to GBK String,return GBK String
public static String IsoToGbk(String isoStr) throws UnsupportedEncodingException {
return new String(isoStr.getBytes("iso-8859-1"), "gbk");
}
}
在JSP页面中代码的用法:
假定你从数据库中取出的String现在是str(还没有进行转换哦)
那要输出到页面的时候就这样写:<%=convertor.IsoToGbk(str)%>
这里的convertor是我所建立的Javabean
如果你不想建立JavaBean,就这样写:
new String(str.getBytes("iso-8859-1"), "gbk");
但是不要忘记在页面的最上面包含
<%@ page import="java.io.*" %>因为要用到这个包,否则会出错。
不过还是建议大家使用JavaBean的好,一般都是这样做的。
这样应该就可以解决第一个问题了。
要解决第二个问题,
首先就是你的连接数据库的URL要变成这样:
jdbc:mysql://localhost:3306/dbName?useUnicode=true&characterEncoding=utf8
这里dbName是你的数据库的名字
因为utf8是支持多国语言传送的,所以一定要使用改字符集连接你的数据库。
光这样还不行,请在每一个JSP页面的头上加这样两个语句:
<%@ page contentType="text/html; charset=gbk"%>
<%request.setCharacterEncoding("GBK");%>
第一个语句表示页面内容使用GBK字符集,这是为了页面显示正确的字符
第二个语句是表示提交表单的时候,以GBK字符集编码形式进行提交,这两个是必须的,否则会出错。
接着就是数据转换,因为JSP页面上的字符集是GBK或GB2312的中文,就用刚才说的第二个方法
跟第一个差不多,把GBK的字符串转成ISO-8859-1的字符串,你可以把整个SQL语句进行转换,也可以只转换那个是中文的String,再组合到SQL语句中,然后写到数据库中去。
好了,至此,万事ok,打开你的Tomcat服务器和MySQL服务器进行测试吧。Good Luck!^_^
总结
JSP中文乱码涉及很多方面,比如数据库服务器,web服务器,操作系统等等,很难一一例举。
但是其核心就是字符编码的问题,只要统一所使用的字符编码,大多问题都能迎刃而解。
也许这里也有说的不对的地方,敬请大家指教,具体问题也欢迎大家来讨论。
相关文章推荐
- Mysql与JSP网页中文乱码问题的解决方案
- JSP+ MySQL中文乱码问题post提交乱码解决方案
- JSP+ MySQL中文乱码问题post提交乱码解决方案
- Mysql与JSP网页中文乱码问题的解决方案
- Mysql与JSP网页中文乱码问题的解决方案
- Mysql与JSP网页中文乱码问题的解决方案
- JSP向MYSQL读写中文乱码问题解决方案
- 转载 Mysql与JSP网页中文乱码问题的解决方案
- JSP中文乱码问题终极解决方案
- Mac 下 MySQL 5.7 连接 navicat 中文乱码问题终极解决方案
- JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决
- JSP中文乱码问题终极解决方案
- JSP中文乱码问题终极解决方案
- Mysql中文乱码问题完美解决方案
- 解决jsp,tomcat,MYSQL下中文乱码问题
- Mysql中文乱码问题完美解决方案
- 我的乱码之路——JSP与MySQL交互的中文乱码解决方案及总结
- java;jsp;tomcat;mysql;hibernate;编码中文乱码全面解决方案
- Servlet连接mysql 中文乱码问题及解决方案剖析
- java;jsp;tomcat;mysql;hibernate;j2ee 编码中文乱码全面解决方案