- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Web容的编码问题
11 -
1 -
Web容器的编码问题
概述
基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GBK 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。
本文针对Web应用中常见的编码问题,就如何在OnceAS Web Container上正确使用和传递中文信息做一个较为全面的比较与分析,并给出了相应的解决方案。
本文将从编码基本知识,Java对字符的处理,以及常见问题的解决三个方面对问题进行阐述。
编码基本知识
最早的编码是ISO-8859-1,和ASCII编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。?
1、ISO-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。很明显,这种表示方法还需要以另一种编码为 基础。?
2、GB2312/GBK?
这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和ISO-8859-1一致(兼容ISO-8859-1编码)。其中GBK编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,GBK是兼容gb2312编码的。?
3、UNICODE?
这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容ISO-8859-1编码 的,也不兼容任何编码。不过,相对于ISO-8859-1编码来说,UNICODE编码只是在前面增加了一个0字节,比如字母a为00?61。?
需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而UNICODE又可以用来表示所有字符,所以在很多软件内部是使用UNICODE编码来处理的,比如java。?
4、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应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。?
1、?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(两个问号)。?
3、new?String(charset)?
这是java字符串处理的另一个标准函数,和上一个函数的作用相反,将字节数组按照charset编码进行组合识别,最后转换为UNICODE存储。参考上述getBytes的例子,GBK?和UTF-8都可以得出正确的结果4e2d?6
您可能关注的文档
最近下载
- 千级无尘室工程施工方案(3篇).docx VIP
- 深度解析《GBT 44037-2024焦炭溶损率及溶损后强度试验方法》.pptx
- 2025 中级注册安全工程师《金属非金属矿山安全》速记口诀.pdf
- 2025年中国吸顶式车载显示器数据监测研究报告.docx
- 九年级化学酸、碱、盐、氧化物知识小结 “三表一图”(二)天津版.doc VIP
- 部编版六年级上册语文第一周(草原-丁香结)达标测评卷 含答案.docx VIP
- 建筑电气安装工程管线预留预埋阶段质量管理.doc VIP
- 激光原理 全套课件.ppt
- 第1.2课《宁夏闽宁镇:昔日干沙滩,今日金沙滩》(课件)-【中职专用】高二语文同步精品课件(高教版2023·职业模块).pptx VIP
- 部编版语文六年级上册 周测卷(一)1草原+2丁香结(含答案).pdf VIP
文档评论(0)