Java字符集笔记 - 编程入门网
2012-01-03
l 文件可以以多种编码方式保存,中文windows下,默认为ansi/gbk. l 编译器读取文件时,需要得到文件的编码,如果未指定,则使用系统默认编码。一般class文件,是以系统默认编码保存的,所以编译不会出问题,但对于jsp文件,如果在中文windows下编辑保存,而部署在英文linux下运行/编译,则会出现问题。所以需要在jsp文件中用pageEncoding指定编码。 l Java编译的时候会转换成统一的unicode编码处理,最后保存的时候再转换为utf编码。 l 当系统输出字符的时候,会按指定编码输出,对于中文windows下,System.out将使用gbk编码,而对于response(浏览器),则使用jsp文件头指定的contentType,或者可以直接为response指定编码。同时,会告诉browser网页的编码。如果未指定,则会使用iso8859-1编码。对于中文,应该为browser指定输出字符串的编码。 l 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()。例如:<META http-equiv="Content-Type" content="text/html; charset=GBK" /> 如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。 需要注意的是,apache有一个设置可以给无编码指定的网页指定编码,该指定等同于jsp的编码指定方式,所以会覆盖静态网页中的meta指定。所以有人建议关闭该设置。 3.5.4. form设置 当浏览器提交表单的时候,可以指定相应的编码。例如:<form accept-charset= "gb2312">.一般不必不使用该设置,浏览器会直接使用网页的编码。 4. 系统软件 下面讨论几个相关的系统软件。 4.1. mysql数据库 很明显,要支持多语言,应该将数据库的编码设置成utf或者unicode,而utf更适合与存储。但是,如果中文数据中包含的英文字母很少,其实unicode更为适合。 数据库的编码可以通过mysql的配置文件设置,例如default-character-set=utf8.还可以在数据库链接URL中设置,例如: useUnicode=true&characterEncoding=UTF-8.注意这两者应该保持一致,在新的sql版本里,在数据库链接URL里可以不进行设置,但也不能是错误的设置。 Java字符集笔记(4)时间:2012-01-034.2. apache appache和编码有关的配置在httpd.conf中,例如AddDefaultCharset UTF-8.如前所述,该功能会将所有静态页面的编码设置为UTF-8,最好关闭该功能。 另外,apache还有单独的模块来处理网页响应头,其中也可能对编码进行设置。 4.3. linux默认编码 这里所说的linux默认编码,是指运行时的环境变量。两个重要的环境变量是LC_ALL和LANG,默认编码会影响到java URLEncode的行为,下面有描述。 建议都设置为"zh_CN.UTF-8". 4.4. 其它 为了支持中文文件名,linux在加载磁盘时应该指定字符集,例如:mount /dev/hda5 /mnt/hda5/ -t ntfs -o ioc |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |