Java 中文乱码总结

来源:互联网 发布:药鼎进阶数据 编辑:程序博客网 时间:2024/05/18 18:19

======================================================
注:本文源代码点此下载
======================================================

每篇一囧:人生就像打电话,不是你先挂,就是我先挂。

1.javascript 传参乱码

2.jsp与页面参数传参乱码

3.链接传参乱码

4.数据库读取乱码

5.java与文件/流之间的乱码

本文转自:http://ykko2009.blog.163.com/blog/static/183199124201138888899993/

======================华丽丽的分割线======================

1.javascript 传参乱码

在浏览器端对要传递的中文参数进行编码处理.代码如下:

xmlhttp.open("post",url,true); //请求参数初始化

xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded"); //因为请求方式为post,所以这里要设置请求头.(如果请求方式为get,此句代码可以省略)

xmlhttp.send("name="+encodeuri(encodeuri("星期日"))); //向服务器端发送参数

在服务器端代码: 页面jsp保证是utf-8编码

printwriter out = response.getwriter(); //得到response的输出流对象

string name1 = request.getparameter("name"); //得到key为"name"的请求参数

string name = urldecoder.decode(name1,"utf-8"); //对得到的参数进行解码

out.print(name); //向浏览器端发送数据

======================华丽丽的分割线======================

2.jsp与页面参数传参乱码

jsp获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setcharacterencoding("utf-8") 。

如果在jsp将变量输出到页面时出现了乱码,可以通过设置response.setcontenttype("text/html;charset=utf-8")。jsp页面乱码通常只要在页面开始地方用上面代码指定字符集编码即可。如果还不行,那么请用下面这句话来转换 str=new string(str.getbytes("iso-8859-1"),"页面编码方式");

======================华丽丽的分割线======================

3.链接传参乱码

在传参的jsp对中文进行编码:href="new.jsp?name=java.net.urlencoder.encode("链接")";

在接受的jsp对中文进行转码:string str = urldecoder.decode(request.getparameter("name "), "utf-8");

======================华丽丽的分割线======================

4.数据库读取乱码

大部分数据库都支持以unicode编码方式,所以解决java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如microsoft的sqlserver驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如mysql驱动:jdbc:mysql://localhost/myapps?useunicode=true&characterencoding=gbk。

======================华丽丽的分割线======================

5.java与文件/流之间的乱码

java读写文件最常用的类是fileinputstream / fileoutputstream和filereader / filewriter。其中fileinputstream和fileoutputstream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的filereader和filewriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用filereader和filewriter的父类:inputstreamreader / outputstreamwriter,它们也是基于字符的,但在构造函数中可以指定编码类型:inputstreamreader(inputstream in, charset cs) 和outputstreamwriter(outputstream out, charset cs)。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/