剖析JSP和Servlet对中文的处理(1) (1)
[ 来源:互网络 | 更新日期:2007-09-24 20:45:29 | 浏览次数:9440]
简介:chinaitlab
这就是通常所说的“中文问题”。
Java中与中文相关的编码
在JDK中,提供了对大多数常用语言的支持。在解决“中文问题”时,表1中的编码是最常用,或者就是最有关系的。
表1 JDK中与中文相关的编码列表
在实际编程时,接触得比较多的是GB2312(GBK)和ISO8859-1。
注:UTF是Unicode Transformation Format的缩写,意为Unicode转换格式。可以这么描述JAVA程序中Unicode与UTF的关系,虽然不绝对。字符串在内存中运行时,表现为Unicode代码,而当要保存到文件或其它介质中去时,用的是UTF。这个转化过程是由writeUTF和readUTF来完成得。
Servlet/JSP对中文的处理过程
总体流程
把问题想成是一个黑匣子。先看黑匣子的一级表示(如图1所示):
图1 IPO模型
这就是一个IPO模型,即输入、处理和输出。同样的内容要经过“从charsetA到Unicode再到charsetB”的转化。
再看二级表示(如图2所示):
图2 JSP、Java输出模型
在这个图中,输入的是JSP和Java源文件。在处理过程中,以Class文件为载体,然后输出。再细化到三级(如图3所示):
图3 IPO模型
JSP文件先生成中间的Java文件,再生成Class。而Servlet和普通App则直接编译生成Class,然后,从Class再输出到浏览器、控制台或数据库等。
JSP:从源文件到Class的过程
JSP源文件是以“.jsp”结尾的文本文件。在本节中,将阐述JSP文件的解释和编译过程,并跟踪其中中文内容的变化。
一般地,JSP源文件经过如下步骤后变成可被引擎执行的Class文件:
1. JSP/Servlet引擎提供的JSP转换工具(JSPC)搜索JSP文件中用<%@ page contentType ="text/html; charset=
2. JSPC用相当于“Javac -encoding
3. 引擎用相当于“Javac -encoding UTF-8”的命令,把Java文件编译成Class文件。
先看一下这些过程中中文字符的转换情况。有如下源代码:
<%@ page contentType="text/html; charset=gb2312"%>
<%
String a="中文";
out.println(a);
%>
这段代码是在UltraEdit for Windows上编写的。保存后,“中文”两个字的16进制编码为“D6 D0 CE C4”(GB2312编码)。经查表,“中文”两字的Unicode编码为“\u4E2D\u6587”,用 UTF表示就是“E4 B8 AD E6 96 87”。打开引擎生成的由JSP文件转变成的Java文件,发现其中的“中文”两个字的位置确实被“E4 B8 AD E6 96 87”替代了,再查看由Java


您的位置:
