Unicode字符集与UTF-8编码

214 阅读3分钟

       最初,计算机使用ASCII码表示字符,主要包括控制字符、英文字符和算术字符等。后来随着计算机在全世界的普及与使用,越来越多国家的字符需要一种方式通过编码进行表示,且不同使用不同的编码方式,这导致同一个编码值(码点)在不同编码表里表示不同的字符,乱码现象由此产生。为了解决这一问题,unicode字符集应运而生。

Unicode字符集

       Unicode字符集囊括了全世界的字符,其中每个字符映射到唯一一个32位的数字,即码点。 码点表示形式为U+XXXX,其中U+表示unicode,XXXX对应字符在unicode中的码点的十六进制表示形式,比如A的码点(65)可以表示为U+0041。Unicode字符集,是只是一种字符表示方式。而在计算机中实现字符与码点间的一一对应,会有不同的编码方式。总之,字符集赋予字符唯一性,编码方式是实现这种唯一性。

       举个例子:集合X={1,2} 到Y={4,8}的一一映射,规定1->4, 2->8,字符与码点就类似这种规定。但是实现这种规定的方式可以不同,比如y = 4x与y= 2^(x+1)都可以实现规定,编码方式就类似如何在计算机中码点的实现方式。

UTF-8

      Unicode编码方式主要有三种:UTF-8,UTF-16,UTF-32。其中UTF-8应用最为广泛。

      UTF-8是一种变长字节编码方式,不同范围的码点使用1~4字节表示。

1)1字节编码

                                                     

其中,红色0表示使用1字节编码,其余黑色位表示码点。例如:A的码点为U+0041

二进制表示为100 0001,其UTF-8编码如下。

                                                         

2)2字节编码

                                  

拉丁字母ñ的码点为U+00F1,超过1个字节表示的码点范围,需要使用2个字节编码来表示。其中,110**、****10标识2字节编码,其余位表示码点。例如:ñ的码点为U+00F1**,二进制表示为11 110001,其UTF-8编码如下,

                                            

3)3字节编码

          

拉丁字母ṍ的码点为U+1E4D,超过2个字节表示的码点范围,需要使用3个字节编码来表示。其中,111010、10标识3字节编码,其余位表示码点。例如:的码点为U+1E4D,二进制表示为1 111001 001101,其UTF-8编码如下,

                   

4)4字节编码

     

表情😭的码点为U+1F62D,超过3个字节表示的码点范围,需要使用4个字节编码来表示。其中,1111010、10、10标识4字节编码,其余位表示码点。例如:😭的码点为U+1F62D,二进制表示为11111 011000 101101,其UTF-8编码如下,