大家好,今天给各位分享探索Unicode的发展历程:从古至今的字符编码演变的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
在Unicode之前
为了在计算机中存储人类可读的文本,字符必须按照一定的规范映射为计算机可以存储的值。在计算机发展初期,逐渐形成了统一的标准。 1967年,ASCII编码首次被用作规范。标准发布。这是一套用来表示现代英语的编码约定,它的全称是美国信息交换标准码。 ASCII 编码非常简单。它只定义了128 个字符。每个字符都由一个唯一的数字表示。每个字符占用一个字节(8bit)的空间。因为只有128 个字符(2 的7 次方),所以每个字符的第一位数字始终为0。 一个ASCII字符只有8位,最多只能表示256个字符,这对于英语来说足够了,但对于中文这样的语言来说还远远不够。因此,在ASCII之上做了一些扩展,用两个字节来表示一个字符。这是1981年发布的GB2312编码,为了与ASCII区别,GB2312中每个字节的最高位为1。这套编码包含了6000多个常用简体汉字,基本满足日常使用的需要。但不支持繁体汉字和一些生僻字,所以后来在GB2312上进行了扩展。这就是后来的GBK编码,称为汉字内码扩展规范。 事实上,当时有很多不同的汉字编码蓬勃发展,而且不仅仅是中文。世界上其他各种语言都在指定自己的标准。不同的编码相互不兼容,这给互联网的推广带来了很大的影响。麻烦了,Unicode势在必行。Unicode
Unicode是国际标准化组织制定的一套字符编码方案,致力于统一世界上所有语言的字符编码。 Unicode为每个字符分配一个固定值,称为编码点(代码点),所有代码点的集合称为编码空间(代码空间)。当前的Unicode编码空间总共包含0x10FFFF(十进制1114111)个码点,分为17个平面,每个平面包含0xFFFF字符。自1991 年发布第一个版本以来,每年都有新字符被纳入Unicode,目前定义的字符集仅使用不到五分之一的编码空间。编码方式
Unicode制定了一套字符集编码标准。在实际应用中,如何表示一个编码点?有几种不同的编码方案:UTF-8、UTF-16 和UTF-32。这些方案各有特点。UTF-32:
这是最简单的编码方式,定长编码。使用4个字节作为编码单元,也就是说每个码点由4个字节表示。 定长编码的一个好处是每个字符占用相同的空间,所以当我们想要获取第n个位置的字符时,可以直接在第一个字符的地址上加上一个固定的偏移量。也就是说可以在O(1)的时间复杂度内对字符串的任意位置进行索引,也就是我们常说的随机索引。但是,这样做的缺点也非常明显。每个字符占用32位,这肯定会造成大量的空间浪费。出于这个原因,UTF-32编码使用得并不多。UTF-16:
在介绍UTF-16之前,我们先来说说UCS-2编码。在早期的Unicode标准中,定义了小于65535(0xFFFF,2的16次方)个码点,所有字符都可以用两个字节的UTF-16编码来表示,所以当时UTF-16仍然是一个固定的编码点。长度编码,UCS-2相当于UTF-16。然而,设计者还是错误地计算了编码点的范围。 16位范围不足以覆盖世界上所有的字符,因此Unicode需要扩大初始范围。在新标准中,编码空间扩展为0x10FFFF的大小,并分为17个大小为65535的块。第一个块包含最初在UCS-2中定义的65535个代码点,称为基本多文种平面(BMP)。其余16个新添加的部分称为辅助平面。所以今天,UTF-16可以被视为UCS-2的父集。 随着标准的扩展,UTF-16 也必须扩展以支持更多代码点。如今的UTF-16编码中,采用2个字节作为一个编码单元,一个编码点需要2或4个字节来表示。 为了在辅助平面上正确表示码点,UTF-16对码点的前缀施加了一些约束,并引入了一个称为代理码点的概念。也就是说,在Unicode编码空间中划分了保留区域。落入该区域的编码点就是代理编码点。该区域包含从前缀110110到前缀110111的所有编码点,即从1101100000000000到1101111111111111。范围为16进制的0xD800到0xDFFF。该区域中的码点只能在UTF-16 编码中成对出现,在UTF-32 和UTF-8 中是非法的。 UTF-16在编码时遵循以下规则: 字节数UTF-16 二进制表示代码点编码范围2xxxxxxxxyyyyyyyyyyyyyyy
【探索Unicode的发展历程:从古至今的字符编码演变】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于有人好好科普一下Unicode的历史了,我还一直以为它就是个编码标准...
有19位网友表示赞同!
从IBM的方案到现在的国际标准,真是经历了漫长的发展啊!
有20位网友表示赞同!
没想到Unicode最初的构思就包含字符的多样性,这理念太棒了!
有17位网友表示赞同!
看了这个文章,我突然明白为什么世界上那么多不同的字符集可以兼容在一起.
有12位网友表示赞同!
这些年来,Unicode一直在默默地支撑着我们使用网络和各种软件。
有10位网友表示赞同!
真的没想到Unicode发展这么久,好多历史我都不知道!
有8位网友表示赞同!
真是个伟大的项目啊,让世界各国的人都能用自己的语言交流。
有15位网友表示赞同!
我之前一直觉得字符编码挺复杂,现在看起来又不一样了
有19位网友表示赞同!
学习一下Unicode的知识,感觉可以更好地理解现代计算机技术的发展!
有8位网友表示赞同!
这个文章写的很详细,让我对Unicode有了更深入的了解。
有18位网友表示赞同!
看完以后,我对 Unicode 的历史和发展现状都有了一个清晰的认识。
有9位网友表示赞同!
没想到unicode的发展会如此复杂有趣,真是个宝藏般的文章啊!
有12位网友表示赞同!
原来计算机字符编码背后还有这么多故事?!
有5位网友表示赞同!
看来Unicode确实是一个很重要却又经常被忽视的技术!
有10位网友表示赞同!
这篇文章让我对信息技术史有了更深的了解。
有17位网友表示赞同!
希望更多人了解 Unicode 的重要性,它连接着我们的世界!
有10位网友表示赞同!
这个文章真是太适合我这样想学习计算机的朋友!
有18位网友表示赞同!
以后再遇到字符编码问题,就能想起 Unicode 的故事啦。
有10位网友表示赞同!
Unicode 真是个厉害的技术,让人们能够用不同的语言互相交流。
有9位网友表示赞同!
希望 Unicode 能继续发展下去,支持越来越多的语言和字符!
有6位网友表示赞同!