表5 Jsp-charset = ISO8859-1时的变化过程
| 序号 | 步骤说明 | 结果 |
| 1 | 编写JSP源文件,且存为GB2312格式 | D6 D0 CE C4 (D6D0=中 CEC4=文) |
| 2 | jspc把JSP源文件转化为临时JAVA文件,并把字符串按照ISO8859-1映射到Unicode,并用UTF格式写入JAVA文件中 | C3 96 C3 90 C3 8E C3 84 |
| 3 | 把临时JAVA文件编译成CLASS文件 | C3 96 C3 90 C3 8E C3 84 |
| 4 | 运行时,先从CLASS文件中用readUTF读出字符串,在内存中的是Unicode编码 | 00 D6 00 D0 00 CE 00 C4 (啥都不是!!!) |
| 5 | 根据Jsp-charset=ISO8859-1把Unicode转化为字节流 | D6 D0 CE C4 |
| 6 | 把字节流输出到IE中,并设置IE的编码为ISO8859-1(作者按:这个信息隐藏在HTTP头中) | D6 D0 CE C4 |
| 7 | IE用“西欧字符”查看结果 | 乱码,其实是四个ASCII字符,但由于大于128,所以显示出来的怪模怪样 |
| 8 | 改变IE的页面编码为“简体中文” | “中文”(正确显示) |
奇怪了!为什么把<Jsp-charset>设成GB2312和ISO8859-1是一个样的,都能正确显示?因为表4表5中的第2步和第5步互逆,是相互“抵消”的。只不过当指定为ISO8859-1时,要增加第8步操作,殊为不便。
再看看不指定<Jsp-charset> 时的情况。
表6 未指定Jsp-charset 时的变化过程
| 序号 | 步骤说明 | 结果 |
| 1 | 编写JSP源文件,且存为GB2312格式 | D6 D0 CE C4 (D6D0=中 CEC4=文) |
| 2 | jspc把JSP源文件转化为临时JAVA文件,并把字符串按照ISO8859-1映射到Unicode,并用UTF格式写入JAVA文件中 | C3 96 C3 90 C3 8E C3 84 |
| 3 | 把临时JAVA文件编译成CLASS文件 | C3 96 C3 90 C3 8E C3 84 |
| 4 | 运行时,先从CLASS文件中用readUTF读出字符串,在内存中的是Unicode编码 | 00 D6 00 D0 00 CE 00 C4 |
| 5 | 根据Jsp-charset=ISO8859-1把Unicode转化为字节流 | D6 D0 CE C4 |
| 6 | 把字节流输出到IE中 | D6 D0 CE C4 |
| 7 | IE用发出请求时的页面的编码查看结果 | 视情况而定。如果是简体中文,则能正确显示,否则,需执行表5中的第8步 |
Servlet:源文件为JAVA文件,格式是GB2312,源文件中含有“中文”这两个汉字
如果<Compile-charset>=GB2312,<Servlet-charset>=GB2312
表7 Compile-charset=Servlet-charset=GB2312 时的变化过程









