為了搞清楚問題,我做了如下測試:
輸出代碼
? <%
?? ?out.println("1 - "+new String("中文".getBytes())+"<br>");
?? ?out.println("2 - "+new String("中文".getBytes(),"GB2312")+"<br>");
?? ?out.println("3 - "+new String("中文".getBytes(),"ISO8859_1")+"<br>");
?? ?out.println("4 - "+new String("中文".getBytes(),"UTF-8")+"<br>");
?? ?out.println("5 - "+new String("中文".getBytes(),"GBK")+"<br>");
?? ?
?? ?out.println("11 - "+new String("中文".getBytes("UTF-8"), "UTF-8")+"<br>");
?? ?out.println("12 - "+new String("中文".getBytes("UTF-8"), "GB2312")+"<br>");
?? ?out.println("13 - "+new String("中文".getBytes("UTF-8"), "ISO8859_1")+"<br>");
?? ?out.println("14 - "+new String("中文".getBytes("UTF-8"), "GBK")+"<br>");
?? ?
?? ?out.println("21 - "+new String("中文".getBytes("GBK"), "GBK")+"<br>");
?? ?out.println("22 - "+new String("中文".getBytes("GBK"), "UTF-8")+"<br>");
?? ?out.println("23 - "+new String("中文".getBytes("GBK"), "GB2312")+"<br>");
?? ?out.println("24 - "+new String("中文".getBytes("GBK"), "ISO8859_1")+"<br>");
?? ?
?? ?out.println("31 - "+new String("中文".getBytes("GB2312"), "GB2312")+"<br>");
?? ?out.println("32 - "+new String("中文".getBytes("GB2312"), "UTF-8")+"<br>");
?? ?out.println("33 - "+new String("中文".getBytes("GB2312"), "GBK")+"<br>");
?? ?out.println("34 - "+new String("中文".getBytes("GB2312"), "ISO8859_1")+"<br>");
?? ?
?? ?out.println("41 - "+new String("中文".getBytes("ISO8859_1"), "ISO8859_1")+"<br>");
?? ?out.println("42 - "+new String("中文".getBytes("ISO8859_1"), "UTF-8")+"<br>");
?? ?out.println("43 - "+new String("中文".getBytes("ISO8859_1"), "GB2312")+"<br>");
?? ?out.println("44 - "+new String("中文".getBytes("ISO8859_1"), "GBK")+"<br>");
?? %>
[1]jsp編碼<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%>
測試結果如下:
1 - ??
2 - ???
3 - 涓?枃
4 - ??
5 - ???
11 - ??
12 - ???
13 - 涓?枃
14 - ???
21 - ??
22 - ????
23 - ??
24 - 中文
31 - ??
32 - ????
33 - ??
34 - 中文
41 - ??
42 - ??
43 - ??
44 - ??
[2]jsp編碼<%@ page language="java" import="java.util.*" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
結果如下:
1 - ??
2 - ???
3 - 涓?枃
4 - ??
5 - ???
11 - ??
12 - ???
13 - 涓?枃
14 - ???
21 - ??
22 - ????
23 - ??
24 - 中文
31 - ??
32 - ????
33 - ??
34 - 中文
41 - ??
42 - ??
43 - ??
44 - ??
[3]jsp編碼<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%>
結果如下:
1 - ??
2 - ???
3 - 涓?枃
4 - ??
5 - ???
11 - ??
12 - ???
13 - 涓?枃
14 - ???
21 - ??
22 - ????
23 - ??
24 - 中文
31 - ??
32 - ????
33 - ??
34 - 中文
41 - ??
42 - ??
43 - ??
44 - ??
分析:
通過上面的測試,我么可以知道
[1]在jsp文件里面的"中文"的編碼是和jsp文件的編碼相一致的。
也就是說,
如果pageEncoding="GBK",那么"中文"的編碼就是GBK編碼
如果pageEncoding="UTF-8",那么"中文"的編碼就是UTF-8編碼
如果pageEncoding="GB2312",那么"中文"的編碼就是GB2312編碼
[2]要想輸出不亂碼,必須要轉成ISO8859_1編碼
如果要輸出一個中文字符串aa不亂碼,你就要把aa轉成ISO8859_1編碼。
但是,你要知道aa的編碼,
如果aa是GBK,那么就用new String(aa.getBytes("GBK"),"ISO8859_1")或者new String(aa.getBytes("GB2312"),"ISO8859_1")
如果aa是UTF-8,那么就用new String(aa.getBytes(),"ISO8859_1")或者new String(aa.getBytes("UTF-8"),"ISO8859_1")
如果aa是GBK2312那么就用new String(aa.getBytes("GB2312"),"ISO8859_1")或者new String(aa.getBytes("GBK"),"ISO8859_1")
然后再輸出就不會有亂碼
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://m.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2009-02-04 10:42
zhyiwww 閱讀(2343)
評論(0) 編輯 收藏 所屬分類:
j2ee