JSP和Servlet对中文的处理过程(6)

http://www.itjxue.com  2015-07-17 08:27  来源:未知  点击次数: 

奇怪了!为什么把设成GB2312和ISO8859-1是一个样的,都能正确显示?因为表4表5中的第2步和第5步互逆,是相互“抵消”的。只不过当指定为ISO8859-1时,要增加第8步操作,殊为不便。

再看看不指定 时的情况。

表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,源文件中含有“中文”这两个汉字

如果=GB2312,=GB2312

表7 Compile-charset=Servlet-charset=GB2312 时的变化过程

序号
步骤说明
结果

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用“简体中文”查看结果
“中文”(正确显示)


如果=ISO8859-1,=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的页面编码为“简体中文”
“中文”(正确显示)

(责任编辑:IT教学网)

更多

推荐JSP教程文章