- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Web容器的编码问题
概述
基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GBK 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。最早的编码是8859-1,和编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。?8859-1?
属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。很 明显,ISO-8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用 ISO-8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然中文两个字不存在ISO-8859-1编码,以gb2312编码为例,应 该是d6d0?cec4两个字符,使用ISO-8859-1编码的时候则将它拆开为4个字节来表示:d6?d0?ce?c4(事实上,在进行存储的 时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节e4?b8?ad?e6?96?87。很明显,这种表示方法还需要以另一种编码为 基础。?GB2312/GBK?
这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和ISO-8859-1一致(兼容ISO-8859-1编码)。其中GBK编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,GBK是兼容gb2312编码的。??
这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容ISO-8859-1编码 的,也不兼容任何编码。不过,相对于ISO-8859-1编码来说,编码只是在前面增加了一个0字节,比如字母a为00?61。?需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而UNICODE又可以用来表示所有字符,所以在很多软件内部是使用UNICODE编码来处理的,比如java。?UTF?-8
考虑到UNICODE编码不兼容ISO-8859-1编码,而且容易占用更多的空间:因为对于英文字母,UNICODE也需要两个字节来表示。所以 UNICODE不便于传输和存储。因此而产生了UTF-8编码,UTF-8编码兼容ISO-8859-1编码,同时也可以用来表示所有语言的字符,不过,UTF-8编码 是不定长编码,每一个字符的长度从1-6个字节不等。另外,UTF-8编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。 ?注意,虽然说UTF-8是为了使用更少的空间而使用的,但那只是相对于UNICODE编码来说,如果已经知道是汉字,则使用 GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然UTF-8编码对汉字使用3个字节,但即使对于汉字网页,UTF-8编码也会比 UNICODE编码节省,因为网页中包含了很多的英文字符。??java对字符的处理?java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。??getBytes(charset)?
这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照char set编码,并以字节方式表示。注意字符串在java内存中总是按 UNICODE编码存储的。比如中文,正常情况下(即没有错误的时候)存储为4e2d?6587,如果char set为GBK,则被编码为 d6d0?cec4,然后返回字节d6?d0?ce?c4。如果char set为UTF-8则最后是e4?b8?ad?e6?96?87。 如果是ISO-8859-1,则由于无法编码,最后返回?3f?3f(两个问号)。?new?String(charset)?
这是java字符串处理的另一个标准函数,和上一个函数的作用相反,将字节数组按照charset编码进行组合识别,最后转换为UNICODE存储。参考上述getBytes的例子,GBK?和UTF-8都可以得出正确的结果4e2d?6587,但ISO-8859-1最后变成了 003f?003f(两个问号)。?因为UTF-8可以用来表示/编码所有字符,所以new?String(?str.getBytes(?UTF-8?),?UTF-8?)?str,即完全可逆。?setCharacterEncoding()?
该函数用来设置http请求或者相应的编码。?该指定只对POST方法有效,对GET方法无效。对于request,是
文档评论(0)