javaweb中文乱码问题
二、浏览器与服务器传输数据乱码处理
?
1、浏览器端编码,一般由服务器端告诉浏览器如何解码数据:
?
1.1、Servlet
?
? ? response.setContentType("text/html; charset=UTF-8");
?
1.3、通用
?
? ? <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
?
1.4、Javascript传参乱码
?
在浏览器端对要传递的中文参数进行编码处理.代码如下:
?
B、在tomcat4之后,可以通过如下配置来解决中文乱码,但必须配置filter?
然后request.setCharacterEncoding(“UTF-8”)也可解决GET乱码
?
?
?
3、Java与数据库之间的乱码:
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如mysql驱动:
?
jdbc:mysql://localhost/MYAPPS?useUnicode=true&characterEncoding=GBK。
?
或者使用JAVA程序,修改编码,程序如下:
?
public class Convert {
?
??public static String ISOtoGB(String iso){
??String gb;
??try{
? ? if(iso.equals("") || iso == null){
? ?? ?return "";
? ? }
? ? else{
? ?? ?iso = iso.trim();
? ?? ?gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
? ?? ?return gb;
? ? }
??}
??catch(Exception e){
? ? System.err.print("编码转换错误:"+e.getMessage());
? ? return "";
? ? }
??}
}
?
?
?
?
?
4、Java与文件/流之间的乱码:
Java读写文件最常用的类是FileInputStream / FileOutputStream和FileReader / FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader / OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
参考文献:http://sishuok.com/forum/blogPost/list/306.html
http://blog.sina.com.cn/s/blog_5bd6b4510101277p.html