jsp、java程序和数据库之间中文乱码问题

来源:互联网 发布:淘宝后台客服电话 编辑:程序博客网 时间:2024/06/05 06:28

一、乱码怎么出现的

废话不说,上代码:

String s="汉字"; //我的java平台编码是gbk,那么对象s是以gbk编码的

System.out.println(s.getBytes(),"GBK");//为了明显起见

String isostr=new String(s.getBytes(),"ISO-8859-1");//以iso88591编码格式构造isostr对象 

System.out.println(isostr); //在gbk编码的平台上打印iso88591编码的String对象

String utfstr=new String(s.getBytes(),"utf-8");

System.out.println(utfstr);

//用utf-8编码的汉字,用gbk显示出现乱码

打印结果为:

汉字

??×?
?й?

可见:以a格式编码,以b格式打印(或者以b格式解码),是出现乱码的根本原因。

二、解决办法


1. java程序和数据库之间中文乱码问题

以mysql数据库为例,java程序在向mysql之类的数据库写入数据时经常发生中文乱码。经过查阅资料后发现解决该类问题的关键是  “编码的一致性!”

什么是编码一致性呢?   具体来说就是java平台的汉字编码要和数据库编码统一,这样才不会出现中文乱码问题!


例如,myeclipse中用   System.out.println(System.getProperty("file.encoding"));   打印出 gbk,由此可以看到我的java平台默认编码是 gbk 。

那么,此时只要我在和数据库连接时将编码方式设置为gbk 就可以避免乱码。 具体的,以mysql为例,此时连接数据库的url

写为 url="jdbc:mysql://localhost:3306/pos?characterEncoding=GBK"     这样java平台和数据库编码一致,就不会出现乱码情况了!


同理可得,如果java平台编码是ISO-8859-1(其实这个编码可以自己设置的,有好多种办法。。。),那么可以将url写成:

 url="jdbc:mysql://localhost:3306/pos?characterEncoding=ISO-8859-1"

2. jsp页面到java程序之间的乱码问题

如上所说,其实也是要保证jsp页面编码和java平台编码的统一性

例如我们页面有中文时,页面编码设置成gbk ,恰巧我们的java平台编码也是gbk,那么从jsp页面发送过来的中文参数不需要转码也不会出现乱码情况。

如果你的jsp页面编码设置成utf-8,java平台编码是gbk,那么此时如果不进行转码的话在myeclipse中打印页面的中文参数就会出现乱码! 针对这种情况,

(如果你就是不想改把jsp页面编码改成gbk)以servlet为例,那么,我们在接收页面参数时可以servlet中设置请求和响应的编码方式:

request.setCharacterEncoding("gbk");//设置请求编码格式
response.setCharacterEncoding("gbk");//设置响应编码格式

其实,还有种一劳永逸的办法,那就是写一个转码的过滤器,如果web请求的编码格式和后台格式不同,那么将编码统一。这样的话,所有对该web程序

的请求都将经过编码检查,哈哈。


3. jsp页面到java平台再到数据库之间乱码问题

有了以上两种情况,那么这三者之间的乱码同理可得: 统一他们三者之间的编码方式就Ok了,就不用说了


个人的一点小小总结,如果有不对的地方,请各位指点,多多包涵哈