- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java中文乱码问题分析
基础知识
介绍
iso8859-1
属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然中文两个字不存在iso8859-1编码,以gb2312编码为例,应该是d6d0 cec4两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:d6 d0 ce c4(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节e4 b8 ad e6 96 87。很明显,这种表示方法还需要以另一种编码为基础。这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。 GB2312-80?是在国内计算机汉字信息技术发展初始阶段制定的,其中包含了大部分常用的一、二级汉字,和?9?区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位0xa1-0xfe,低位也是?0xa1-0xfe;汉字从?0xb0a1?开始,结束于?0xf7fe; GBK?是?GB2312-80?的扩展,是向上兼容的。它包含了?20902?个汉字,其编码范围是?0x8140-0xfefe,剔除高位?0x80?的字位。其所有字符都可以一对一映射到?Unicode?2.0,也就是说?JAVA?实际上提供了?GBK?字符集的支持。这是现阶段?Windows?和其它一些中文操作系统的缺省字符集,但并不是所有的国际化软件都支持该字符集,感觉是他们并不完全知道?GBK?是怎么回事。值得注意的是它不是国家标准,而只是规范。随着?GB18030-2000国标的发布,它将在不久的将来完成它的历史使命。GB18030-2000(GBK2K)?在?GBK?的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。GBK2K?从根本上解决了字位不够,字形不足的问题。它有几个特点它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。?编码是变长的,其二字节部分与?GBK?兼容;四字节部分是扩充的字形、字位,其编码范围是首字节?0x81-0xfe、二字节0x30-0x39、三字节?0x81-0xfe、四字节0x30-0x39。它的推广是分阶段的,首先要求实现的是能够完全映射到?Unicode?3.0?标准的所有字形。?它是国家标准,是强制性的。?现在还没有任何一个操作系统或软件实现了?GBK2K?的支持,这是现阶段和将来汉化的工作内容unicode
这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母a为00 61。需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。 ISO 10646, 即通用字符集(Universal Character Set, UCS),四个字节编码
UCS 标准 (ISO 10646) 描述了一个 31 位字符集的体系, 不过, 目前只使用了前面 65534个编码位置 (0x0000-0xfffd, 它们被称为 基本多语言块 (Basic Multilingual Plane,BMP)), 分配给了字符, 而且我们估计只有那些很古怪的字符(比如.Hieroglyphics)为了专门的科学目的, 才会在将来的某个时候, 需要 16 位的 BMP 之外的部分.
4e00-9fa5
UTF
考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。 注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉
文档评论(0)