UTF-8、UTF-16、Unicode的区别

        看了很多网上的总结,我捞出来最干的部分罗列在这里,希望对大家有帮助

         字符集是指字符的集合,例如所有的英文字母是字符集,所有的汉字也是字符集,全世界所有语言的符号都放在一起,也可以称为一个字符集,字符集中的字符没有顺序之分,在给字符集合中的每个字符都分配一个整数编号之后,这个字符集就有了顺序,成为编码字符集。同时,根据这个编号可以唯一确定字符集中的某个字符。当然对于同一个字符,不同的编码字符集所指定的整数编号也不尽相同,例如“儿”字,在Unicode中,它的编号是0x513F(为方便起见以十六进制表示,但这个整数编号并不要求必须以十六进制表示),表示它是编码字符集Unicode中的第0x513F个字符。而在编码字符集Big5中,它就是第0xA449个字符了。许多字符在不同的编码字符集中被分配了相同的整数编号,如英文字母“A”在ASCII和Unicode中都是第0x41个字符。需要注意的是,编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所用的值,计算机中存储的字符到底使用什么二进制整数值来表示,是由编码方式决定的。

         一般不用二进制来表示某个字符的编码(因为不便于书写和阅读),一般采用十六进制来表示某个字符的编码。

         编码方式决定了如何将一个字符的整数编码对应到一个二进制数,有的编码方式直接将该整数编码转换为二进制数存储在计算机中(如英文字符),几乎所有的编码方式中,英文字母的整数编码都与其在计算机内存储的二进制数一致。但有的编码方式,例如适用于Unicode字符集的UTF-8编码形式,就将很大一部分字符的整数编码作了变换后再存储在计算机中。以“汉”为例,“汉”的Unicode编码为6C49,但其UTF-8编码为E6B189(变成了三个字节,表示汉”是编码字符集Unicode中的第6C49个字符,将该整数编号6C49以编码方式UTF-8编码为二进制后得到E6B189)。另一种编码方式UTF-16对Unicode中的前65536个字符的编码均不做变换,直接作为计算机存储时使用的值(对65536以后的字符,仍然要做变换),如“汉”的Unicode编码为6C49,经过编码方式UTF-16编码后存储在计算机上时,它的编码仍是6C49。正是因为UTF-16的存在,使得很多人认为Unicode是一种编码方式(实际上Unicode是一种编码字符集),也因此很多人说Unicode的时候,实际上指的是UTF-16(再重申一遍,Unicode是编码方式,UTF-16是字符集,虽然内存中两者的表示方式刚好一样,但完全不是一种东西)

你可能感兴趣的:(UTF-8、UTF-16、Unicode的区别)