什么是Unicode?Unicode,中文又称万国码、国际码,是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。 简单来说,就是一套囊括的世界上大部分国家的文字编码方式,使得全球的计算机在文字编码上能够拥有统一的标准。 为什么会有Unicode?计算机是在美国发明的,理所当然的使用的是英文字母,构成英语的不过就是26个拉丁字母加一些符号和数字,所以最初的电脑编码系统比较简单,也就是大家最熟悉的ASCII ((American Standard Code for Information Interchange)美国信息交换标准代码)。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 。 128个字符,只需要1个字节就可以表示。存储很简单,效率也很高。但是随着世界发展,世界上使用计算机的人越来越多,就带来了一个问题,不是全世界人民都使用的拉丁字母,有些国家使用的字母里有许多是 人总是会想办法的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从 但是在中国,这一套行不通,我们使用的文字系统汉字的数量又有上万个,我们需要建立自己的编码方式。中国人的解决方案是:小于127号的还是继续使用,并且用2个大于127的字节表示一个中文字符,前面的一个字节(他称之为 但是中文汉字的数量太多了,不够用,大家发现冷门生僻字和繁体字等等还是无法识别。于是就只是要求高字节大于127就认为是2字节的中文字符,这样结果扩展之后的编码方案被称为 中国不是个例,当时几乎每个不兼容ASCII的国家都搞了一套自己的字符编码,且只适用于自己国家,可以想象各国之间沟通时的混乱,不知道编码方式,你看到的就是一团乱码。所以,创立一套统一世界字符的编码是势在必行的。 ISO(国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:弃用所有的地区性编码方案,重新搞一个包括了地球上所有文化的字母和符号的编码!叫做”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称
UTF什么是UTF? 首先,我想大家都明白,字符编码其实就是把每一个字符与一个二进制串对应起来,形成一个对应关系,一张对应表。你可以直接按照这张对应表把字符转成二进制存储起来,再在别的地方读取出来按照这张表翻译出内容。就比如ASCII码,你只需要读出一个字节,然后查表就知道这是什么字符了。Unicode同样可以如此,你只需要每次读两个字节,然后查表就可以了。这样的方式就有一个痛点,原本ASCII码中单子节就能表示的字符,比如 其实我们可以发现,问题并不出在Unicode的编码上,因为它定义的只是字符对应的一个编号而已,6万个符号无论你怎么编,都一定要6万个数来对应不是吗?这时大家可以看看上面的ASCII表图片,可以看到每个字符前面都有个10进制的数字,这其实就是排个序挨个给每个字符编个号而已,具体你怎么存,那是你存储方式的问题,人家只规定来这个编号对应哪个字符。只不过直接按照编号对应二进制来存刚好最合适而已。 但是在Unicode这里,直接用编号对应的二进制来存就不太合适,浪费太多,所以问题其实出现在存取的方式上面。这里就可以引出UTF了。Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicod转换格式(Unicode Transformation Format,简称为UTF)。 UTF-8也就是UTF中的一种而已,你肯定也听过还有UTF-16,UTF-32什么的。到这里其实我已经讲清楚Unicode和UTF-8的区别了,但是具体搞清楚UTF-8是采用了什么样的存取方式,哦不,我们现在要改口叫实现方式,从而实现了存储空间的节省,就需要到另一篇详解UTF-8是如何设计的了。 |