zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0

为了搞清楚问题,我做了如下测试:

输出代码

  <%
    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://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2009-02-04 10:42 zhyiwww 阅读(2341) 评论(0)  编辑  收藏 所属分类: j2ee

只有注册用户登录后才能发表评论。


网站导航: