utf-8 编码的问题
为什么说utf-8是单字节编码,有些字符需要使用2字节或者3字节才能表示,对于多字节应该有字节顺序的问题,为什么utf-8不像utf-16那样有这个问题。
uft-8编码规则:
1字节 0000-007f 0xxxxxxx
2字节 0080-07ff 110xxxxx10xxxxxx
3字节 0800-FFFF 1110xxxx10xxxxxx10xxxxxx
是不是这样理解:每个字节都有特定的位,如1110,110,10,单字节编码也就是这个意思。通过这个可以区分字节顺序,比如3字节1110XXXXX肯定在最前面。
------解决方案--------------------使用不定码长,并且把常用的字符用短码表示可以节约存储空间。但是要区分一个3个字节的数据代表1个3字节的编码呢还是3个1字节的编码呢,还是1个2字节+2个1字节呢?所以约定了前缀。这不是很简单的道理么?
------解决方案--------------------是的,就是通过首几个bit决定是一个字节还是多个字节。
以0开始就是单字节
以110开始就是双字节
以1110开始就是三字节
以10开始就是双字节或者三字节后面的字节。
------解决方案--------------------
是这样的。
而UTF-16则每两个字节成一个单元。有人把低位放前,有人把高位放前,所以有UTF-16LE和UTF-16BE。
(绝大部分UTF-16字符为两个字节,但不排除有些UTF-16字符会有两个单元,即4个字节)