内容是 UNICODE 编码的类保存在操作系统中了, 以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。 C、JSP 代码和 Servlet 类 经过第二步后,JSP 文件也被转化为 Servlets 类文件,只不过它不像标准的 Servlets 一校存在于 classes 目录 中,它存在于 WEB 容器的临时目录中,故这一步中我们也
把它做为 Servlets 来看。 对 于 Servlets,客户端请求它时,WEB 容器调用它的 JVM 来运行 Servlet,首先,JVM 把 Servlet 的 class 类从系统中读出并装入内 存中,内存中是以 UNICODE 编码的 Servlet 类的代码,然后 JVM 在内存中运行该 Servlet 类,如果 Servlet 在运行的过程中,需要接受 从客户端传来的字符如:表单输入的值和 URL 中传入的 值,此时如果程序中没有设定接受参数时采用的编码格式,则 WEB 容器会默认采用 ISO-8859-1 编码格式来 接受传入的值并在 JVM 中转化为 UNICODE 格式的保存在 WEB 容器的内存中。Servlet 运行后生成输出,输 出的字符串是 UNICODE 格式的,紧接着,容器将 Servlet 运行产生的 UNICODE 格式的串(如 html 语法,用 户输出的串等)直接发送到客户端浏览器上并输出给用户,如果 此时指定了发送时输出的编码格式,则按指 定的编码格式输出到浏览器上,如果没有指定,则默认按 ISO-8859-1 编码发送到客户的浏览器上。 D、Java 程序和数据库之间 对 于几乎所有数据库的 JDBC 驱动程序,默认的在 JAVA 程序和数据库之间传递数据都是以 ISO-8859-1 为 默认编码格式的,所以,我们的程序在向数据 库内存储包含中文的数据时,JDBC 首先是把程序内部的 UNICODE 编码格式的数据转化为 ISO-8859-1 的格式,然后传递到数据库中,在数据库保 存数据时,它默认 即以 ISO-8859-1 保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。 3、分析常见的 JAVA 中文问题几个必须清楚的原则 首先,经过上面的详细分析,我们可以清晰地看到,任何 JAVA 程序的生命期中,其编码转换的关键过程是 在于:最初编译成 class 文件的转码和最终向用户输出的转码过程。 其次,我们必须了解 JAVA 在编译时支持的、
常用的编码格式有以下几种: *ISO-8859-1,8-bit, 同 8859_1,ISO-8859-1,ISO_8859_1 等编码 *Cp1252,美国英语编码,同 ANSI 标准编码 *UTF-8,同 unicode 编码 *GB2312,同 gb2312-80,gb2312-1980 等编码 *GBK , 同 MS936,它是 gb2312 的扩充 及其它的编码,如韩文、日文、繁体中文等。同时,我们要注意这些编码间的兼容关体系如下: unicode 和 UTF-8 编码是一一对应的关系。GB2312 可以认为是 GBK 的子集,即 GBK 编码是在 gb2312 上 扩展来的。同时,GBK 编码包含了 20902 个 汉字,编码范围为:0x8140-0xfefe,所有的字符可以一一对应到 UNICODE2.0 中来。 再次,对于放在操作系统中 的.java 源程序文件,在编译时,我们可以指定它内容的编码格式,具体来说用 -encoding 来指定。注意:如果源程序中含有中文字符,而你用 -encoding 指定为其它的编码字符,显然是要出 错的。 用-encoding 指定源文件的编码方式为 GB
K 或 gb2312, 无论我们在什么系统上编译 含有中文字符的 JAVA 源程序都不会有问题,它都会正确地将中文转化为 UNICODE 存储在 class 文件中。 然后, 我们必须清楚, 几乎 所有的 WEB 容器在其内部默认的字符编码格式都是以 ISO-8859-1 为默认值的, 同时,几乎所有的浏览器在传递参数时都是默认以 UTF-8 的方式来传 递参数的。所以,虽然我们的 Java 源文
件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以 ISO-8859-1 来处理的。 4、中文问题的分类及其建议最优解决办法 了解以上 JAVA 处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法。 我们的目标是: 我们在中文系统中编辑的含有中文