Unicode,UTF-8,UTF-16,UTF-32

為{幸葍}努か 提交于 2019-11-29 21:30:51

什么是Unicode,UTF-8,UTF-16,UTF-32?要知道他们是什么或者厘清他们之间的联系,需要从我们知道的Ascll码说起。

 

Ascll

在计算机中,每八个二进制组成了一个字节(Byte),所以以前人们用8为二进制码来编码英文字母(第一位是0),比如“01000001”代表大写字母A。但是这样不同的组成只有128个,在美国128个字母够了,但是在世界各地,各种语言就不够用了,于是,许多国家将第一位变为1,又生出了许多不同的字符。与此同时,新的问题便产生了,不同国家对新增的128个数字赋予了不同的含义。所以不同的国家有不同的编码方式,所以不知道对方的编码方式,就会导致乱码。

 

Unicode

针对此现象,Unicode出现了。Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号的范围从0x000000到0x10FFFF,有110多万,这个编号一般写成16进制,在前面加上U+,例如“马”的Unicode是U+9A6C。Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。对于存储,便产生了多种方案:主要有UTF-8,UTF-16,UTF-32。

 

 

UTF-32

这个就是字符所对应编号的整数二进制形式,四个字节。这种存储方式即最简单直接的直接转换,如将“马”的U+9A6C直接转化为二进制1001101001101100。

注:计算机在存储器中排列字节有两种方式:大端法和小端法,大端法就是将高位字节放到低地址处,比如0x1234,计算机用两个字节存储,一个是高位字节0x12,一个是低位字节0x34,如果不分大小端的话,那么就会出现解读错误。

 

UTF-16

使用变长字节表示。

U+0000 ~ U+FFFF字符,直接用两个字节表示。

U+10000 ~ U+10FFFF字符,需要用四个四届表示。

同样存在大小端问题,所有有UTF-16BE表示大端,UTF-16LE表示小端。

 

UTF-8

也是变长字节表示,分为1-4个字节。由于UTF-8的处理单元为一个字节,所以处理器在处理的时候就不需要考虑这一字节的存储是在高位还是低位。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!