可变长度的 UTF-8 是如何保证不出乱码的?
UTF-8作为一种可变长度的字符编码,他是如何知道一个字符到底需要几个字节表示呢?他是如何这么智能和聪明的?
比如一个中文字符,在UTF-8编码中,可能需要占据三个字节的长度,而一个英文字符仅仅需要占据一个字节的长度。他们是如何协作,才得以保证不会输出乱码呢?
这一切,就要从UTF-8的规定说起了,有了这个规则,就能保证字符总是可以正确显示了。
- 如果一个字符只需要一个字节即可表示,那这个字节的二进制必须以0开始,如:0xxxxxxx
- 如果一个字符需要两个字节才能表示,那么这个字符的第一个字节(高位字节),需要以110开头,第二个字节(低位字节)需要以10开头,如:110xxxxx 10xxxxxx
- 如果一个字符需要三个字节才能表示,那么这个字符的高位字节,需要以1110开头,其余后面的两个低位字节已10开头,如:1110xxxx 10xxxxxx 10xxxxxx
聪明如你,一定从上面的123中发现了某种不可告人的秘密规律。假如现在是一个汉字,那么需要用三个字节表示,其中有8位已经是固定的了,还有16位是可用的。虽然是用三个字节表示,但是有效位只有16位,有效位还是占两个字节。