unicode和UTF-8 编码关系及转化方式
unicode
最开始的编码形式为ASCII码,一共8位,也就是只可编码最多256个字符。现在我们用了其中的128个用来编码英文字母、数字、特殊字符等共128个。
只能编码128个当然是远远不够的,因为包含不同语言等各种字符,非常庞大的一个体系。
因此,为了对所有的字符有统一的编码,就出现了Unicode编码。
要注意的是,unicode只是规定了每个符号的二进制编码,但具体怎么存储并没有规定。可以想一下,如果采用固定长度的编码存储方式,则对于一些短字节的字符来说,非常浪费空间。
因此,就出现了UTF-8,也就是说:
UTF-8是unicode的实现方式之一。
unicode到UTF-8
UTF-8采用不定长的编码方式,只有两个规则:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
举例如下:
汉字“星”
查询可得其unicode编码为:661F
将其转化为二进制为:0110 0110 0001 1111
按照Unicode-UTF-8的转化规则:
确定所需的UTF-8编码字节数为3,
首先,按照规则2)确定高位(1110_ _ _ )(10 _ _ _ _ _ )(10 _ _ _ _ _)然后,从最低位开始填充unicode的二进制编码,即为
(1110 0110)(1001 1000)(1001 1111) E6989F