顶部468*60ad 顶部468*60ad 顶部468*60ad 顶部468*60ad

JSP和Servlet对中文的处理过程

2007-12-11 23:32:05  来源:网页教学网 站长整理

下节先讨论Servlet从JAVA文件到CLASS文件的转化过程,然后再解释从CLASS文件如何输出到客户端。之所以这样安排,是因为JSP和Servlet在输出时处理方法是一样的。

Servlet:从源文件到Class的过程

网页教学网

Servlet源文件是以“.java”结尾的文本文件。本节将讨论Servlet的编译过程并跟踪其中的中文变化。 Webjx.Com

用“javac”编译Servlet源文件。javac可以带“-encoding ”参数,意思是“用< Compile-charset >中指定的编码来解释Serlvet源文件”。 网页教学网

源文件在编译时,用来解释所有字符,包括中文字符和ASCII字符。然后把字符常量转变成Unicode字符,最后,把Unicode转变成UTF。

在Servlet中,还有一个地方设置输出流的CharSet。通常在输出结果前,调用HttpServletResponse的setContentType方法来达到与在JSP中设置一样的效果,称之为。 Webjx.Com

注意,文中一共提到了三个变量:、和。其中,JSP文件只与有关,而和只与Servlet有关。

看下例:

import javax.servlet.*;

import javax.servlet.http.*;

网页教学网

class testServlet extends HttpServlet 网页教学网

{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

Webjx.Com

throws ServletException,java.io.IOException Webjx.Com

{

Webjx.Com

resp.setContentType("text/html; charset=GB2312");

java.io.PrintWriter out=resp.getWriter();

out.println(""); Webjx.Com

out.println("#中文#");

网页教学网

out.println(""); Webjx.Com

}

}


该文件也是用UltraEdit for Windows编写的,其中的“中文”两个字保存为“D6 D0 CE C4”(GB2312编码)。 网页教学网

开始编译。下表是不同时,CLASS文件中“中文”两字的十六进制码。在编译过程中,不起任何作用。只对CLASS文件的输出产生影响,实际上是和一起,达到与JSP文件中的相同的效果,因为对编译和CLASS文件的输出都会产生影响。

网页教学网

表3 “中文”从Servlet源文件到Class的转变过程

Webjx.Com

Compile-charset
Servlet源文件中
Class文件中
等效的Unicode码 Webjx.Com

GB2312
D6 D0 CE C4

(GB2312)
E4 B8 AD E6 96 87 (UTF)
\u4E2D\u6587 (在Unicode中=“中文”)

ISO-8859-1
D6 D0 CE C4 网页教学网

(GB2312)
C3 96 C3 90 C3 8E C3 84 (UTF)
\u00D6 \u00D0 \u00CE \u00C4 (在D6 D0 CE C4前面各加了一个00) Webjx.Com

无(默认)
D6 D0 CE C4

Webjx.Com

(GB2312)
同ISO-8859-1
同ISO-8859-1


普通Java程序的编译过程与Servlet完全一样。

Webjx.Com

文章评论

共有 0 位网友发表了评论 查看完整内容

推荐文章