Java字符集编码(二)

2014-11-24 09:15:09 · 作者: · 浏览: 2
定正确的编码。


3.4.2 文件编译
假设文件是gbk编码保存的,而编译有两种编码选择:gbk或者iso8859-1,前者是中文windows的默认编码,后者是linux的默认编码,当然也可以在编译时指定编码。


编译过程如下:


(1) Jsp * (gbk:d6d0 cec4)


(2) java file *(gbk:d6d0 cec4)


(3) compiler read uincode(gbk:4e2d 6587; iso8859-1:00d6 00d 000ce 00c4)


(4) compiler write utf(gbk:e4b8ad e69687; iso8859-1:*)


(5) compiled file unicode(gbk:4e2d 6587; iso8859-1:00d6 00d 000ce 00c4)


(6) class unicode(4e2d 6587)


(7) system.out / jsp.out gbk(d6d0 cec4)


(8) os console / browser


所以用gbk编码保存,而用iso8859-1编译的结果是不正确的。


(1) 文件可以以多种编码方式保存,中文windows下,默认为ansi/gbk。


(2) 编译器读取文件时,需要得到文件的编码,如果未指定,则使用系统默认编码。一般class文件,是以系统默认编码保存的,所以编译不会出问题,但对于 jsp文件,如果在中文windows下编辑保存,而部署在英文linux下运行/编译,则会出现问题。所以需要在jsp文件中用 pageEncoding指定编码。


(3) Java编译的时候会转换成统一的unicode编码处理,最后保存的时候再转换为utf编码。


(4) 当系统输出字符的时候,会按指定编码输出,对于中文windows下,System.out将使用gbk编码,而对于response(浏览器),则使用 jsp文件头指定的contentType,或者可以直接为response指定编码。同时,会告诉browser网页的编码。如果未指定,则会使用 iso8859-1编码。对于中文,应该为browser指定输出字符串的编码。


(5) browser显示网页的时候,首先使用response中指定的编码(jsp文件头指定的contentType最终也反映在response上),如果未指定,则会使用网页中meta项指定中的contentType。


3.5几处设置
对于web应用程序,和编码有关的设置或者函数如下。


3.5.1 jsp编译
指定文件的存储编码,很明显,该设置应该置于文件的开头。例如:<%@page pageEncoding="GBK"%>。另外,对于一般class文件,可以在编译的时候指定编码。


3.5.2 jsp输出
指定文件输出到browser是使用的编码,该设置也应该置于文件的开头。例如:<%@ page contentType="text/html; charset= GBK" %>。该设置和response.setCharacterEncoding("GBK")等效。


3.5.3 meta设置
指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行 response.setCharacterEncoding()。


例如:


如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。


需要注意的是,apache有一个设置可以给无编码指定的网页指定编码,该指定等同于jsp的编码指定方式,所以会覆盖静态网页中的meta指定。所以有人建议关闭该设置。


3.5.4 form设置
当浏览器提交表单的时候,可以指定相应的编码。例如:

。一般不必不使用该设置,浏览器会直接使用网页的编码。