- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java字符编码全解
1. 概述
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。
在下面的描述中,将以中文两个字为例,经查表可以知道其GB2312编码是d6d0 cec4,Unicode
编码为4e2d 6587,UTF编码就是e4b8ad e69687。注意,这两个字没有iso8859-1编码,但可
以用iso8859-1编码来表示。
2. 编码基本知识
最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编
码,重要的有如下几个。
2.1. iso8859-1
属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。
很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机
最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用
该编码。比如,虽然中文两个字不存在iso8859-1编码,以gb2312编码为例,应该是d6d0 cec4
两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:d6d0cec4(事实上,在进行
存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节e4 b8 ad e6 96 87。
很明显,这种表示方法还需要以另一种编码为基础。
2.2. GB2312/GBK
这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1
编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312
编码的。
2.3. unicode
这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文
字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编
码来说,uniocode编码只是在前面增加了一个0字节,比如字母a为00 61。
需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码(汉字双字节,英文单字节)),
unicode unicode java
unicode unicode java
而uunniiccooddee又可以用来表示所有字符,所以在很多软件内部是使用uunniiccooddee编码来处理的,比如jjaavvaa。
2.4. UTF
unicode iso8859-1 unicode
unicode iso8859-1 unicode
考虑到uunniiccooddee编码不兼容iisso-11编码,而且容易占用更多的空间:因为对于英文字母,uunniiccooddee
也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1
utf
utf
编码,同时也可以用来表示所有语言的字符,不过,uuttff编码是不定长编码,每一个字符的长度从1-6个
字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三
个字节。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是
汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用
3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。
3. java对字符的处理
在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定
程度的处理。
3.1. getBytes(charset)
这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码
文档评论(0)