1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java ucs 2_请问UTF-8与UCS-2之间有何区别与联系?

java ucs 2_请问UTF-8与UCS-2之间有何区别与联系?

时间:2021-12-23 22:17:28

相关推荐

java ucs 2_请问UTF-8与UCS-2之间有何区别与联系?

Unicode - UCS - 万国码

通用字符集 - UCS(Universal Character Set)

首先要说明的是Unicode和UCS并不是完全相同的概念

Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。Unicode符号需要字节数不等,从1个字节到4个字节,甚至更多。这里就有个严重的问题,计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。出于节省空间的目的,对Unicode编码的实现方式有所不同。

Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)

把带有 BOM 的小端序 UTF-16 称作「Unicode」也是 Windows 的臭毛病。

简单说Windows记事本里的Unicode会误导别人。Unicode本身是没有大端序以及小端序的区别的。

UTF - Unicode/UCS Transformation Format

UTF-8编码字节含义UTF-8编码中的任意字节B,如果B的第一位为0,则B为ASCII码且B独立的表示一个字符;

如果B的第一位为1,第二位为0,则B为一个多字节字符中的后续字节;

如果B的前两位为1,第三位为0,则B为两个字节的字符中的第一个字节;

如果B的前三位为1,第四位为0,则B为三个字节的字符中的第一个字节;

如果B的前四位为1,第五位为0,则B为四个字节的字符中的第一个字节;

因此,对UTF-8编码中的任意字节,根据第一位,可判断是否为ASCII字符;根据前二位,可判断该字节是否为一个字符编码的第一个字节;根据前四位(如果前两位均为1),可确定该字节为字符编码的第一个字节,并且可判断对应的字符由几个字节表示;根据前五位(如果前四位为1),可判断编码是否有错误或数据传输过程中是否有错误。

UCS-2、UCS-4与UTF-16、UTF-32

UCS-2对每一个Unicode码位使用2bytes字集(16位bit);

UCS-4对每一个Unicode码位使用4bytes字集(32位bit);

UTF-16可看成是UCS-2的父集。在没有辅助平面字符(surrogate code points)前,UTF-16与UCS-2所指的是同一的意思。但当引入辅助平面字符后,就称为UTF-16了。现在若有软件声称自己支持UCS-2编码,那其实是暗指它不能支持在UTF-16中超过2bytes的字集。对于小于0x10000的UCS码,UTF-16编码就等于UCS码。

UTF-32 原本是 UCS-4 的子集,但JTC1/SC2/WG2声明,所有未来对字符的指定都将会限制在BMP及其14个补充平面。

于是就现状而言,除了 UTF-32 标准包含额外的 Unicode 意涵,UCS-4 和 UTF-32 大体是相同的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。