Cur*_*tel 4 unicode utf-8 utf character-encoding
我最近一直在阅读UTF-8可变宽度编码,我发现奇怪的是,UTF-8指定每个连续字节的前两位为10.
Range | Encoding
-----------------+-----------------
0 - 7f | 0xxxxxx
80 - 7ff | 110xxxx 10xxxxxx
800 - ffff | 1110xxx 10xxxxxx 10xxxxxx
10000 - 10ffff | 11110xx 10xxxxxx 10xxxxxx 10xxxxxx
Run Code Online (Sandbox Code Playgroud)
我正在玩其他可能的可变宽度编码,并发现通过使用以下方案,最多需要3个字节来存储所有Unicode.如果第一位是1,则字符被编码为至少一个字节(读取直到第一位为0).
Range | Encoding
-----------------+-----------------
0 - 7f | 0xxxxxx
80 - 407f | 1xxxxxx 0xxxxxxx
4080 - 20407f | 1xxxxxx 1xxxxxxx 0xxxxxxx
Run Code Online (Sandbox Code Playgroud)
UTF-8中的连续位真的那么重要吗?第二种编码看起来效率更高.
UTF-8是自我验证的,快速前进,更容易后退.
自我验证:由于序列中的第一个字节指定了长度,因此下一个X字节必须适合10xxxxxx,或者您的序列无效.单独查看10xxxxxx字节可立即识别为无效.
您建议的编码没有内置验证.
快速前进:如果必须跳过该字符,则可以立即跳过由第一个字节确定的X字节,而不必检查每个中间字节.
后退更容易:如果你必须向后读取字节,你可以立即识别连续字符10xxxxxx.然后,您就可以向后扫描过去10xxxxxx的字节11xxxxxx前导字节,而不必扫描过去的前导字节.
请参阅维基百科上的UTF-8无效字节序列.