| 序号 | 步骤说明 | 结果 |
| 1 | 编写Servlet源文件,且存为GB2312格式 | D6 D0 CE C4 (D6D0=中 CEC4=文) |
| 2 | 用javac –encoding GB2312把JAVA源文件编译成CLASS文件 | E4 B8 AD E6 96 87 (UTF) |
| 3 | 运行时,先从CLASS文件中用readUTF读出字符串,在内存中的是Unicode编码 | 4E 2D 65 87 (Unicode) |
| 4 | 根据Servlet-charset=GB2312把Unicode转化为字节流 | D6 D0 CE C4 (GB2312) |
| 5 | 把字节流输出到IE中并设置IE的编码属性为Servlet-charset=GB2312 | D6 D0 CE C4 (GB2312) |
| 6 | IE用“简体中文”查看结果 | “中文”(正确显示) |
如果<Compile-charset>=ISO8859-1,<Servlet-charset>=ISO8859-1
表8 Compile-charset=Servlet-charset=ISO8859-1时的变化过程
| 序号 | 步骤说明 | 结果 |
| 1 | 编写Servlet源文件,且存为GB2312格式 | D6 D0 CE C4 (D6D0=中 CEC4=文) |
| 2 | 用javac –encoding ISO8859-1把JAVA源文件编译成CLASS文件 | C3 96 C3 90 C3 8E C3 84 (UTF) |
| 3 | 运行时,先从CLASS文件中用readUTF读出字符串,在内存中的是Unicode编码 | 00 D6 00 D0 00 CE 00 C4 |
| 4 | 根据Servlet-charset=ISO8859-1把Unicode转化为字节流 | D6 D0 CE C4 |
| 5 | 把字节流输出到IE中并设置IE的编码属性为Servlet-charset=ISO8859-1 | D6 D0 CE C4 (GB2312) |
| 6 | IE用“西欧字符”查看结果 | 乱码(原因同表5) |
| 7 | 改变IE的页面编码为“简体中文” | “中文”(正确显示) |
如果不指定Compile-charset或Servlet-charset,其默认值均为ISO8859-1。
当Compile-charset=Servlet-charset时,第2步和第4步能互逆,“抵消”,显示结果均能正确。读者可试着写一下Compile-charset<>Servlet-charset时的情况,肯定是不正确的。
当输出对象是数据库时
输出到数据库时,原理与输出到浏览器也是一样的。本节只是Servlet为例,JSP的情况请读者自行推导。
假设有一个Servlet,它能接收来自客户端(IE,简体中文)的汉字字符串,然后把它写入到内码为ISO8859-1的数据库中,然后再从数据库中取出这个字符串,显示到客户端。
表9 输出对象是数据库时的变化过程(1)









