UTF-8中的解码如何知道字节边界?

bts*_*tse 4 python decode utf-8

我一直在阅读关于unicode编码的一堆阅读,特别是关于Python的.我觉得我现在对它有很强的理解,但还有一个小细节,我有点不确定.

解码如何知道字节边界?例如,假设我有一个带有两个unicode字符的unicode字符串,其字节表示分别为\xc6\xb4\xe2\x98\x82.然后我将此unicode字符串写入文件,因此该文件现在包含字节 \xc6\xb4\xe2\x98\x82.现在我决定打开并读取文件(并且Python默认将文件解码为utf-8),这引出了我的主要问题.

解码如何知道解释字节\xc6\xb4而不是\xc6\xb4\xe2

Gre*_*ill 5

可以根据位模式轻松确定字节边界.在您的情况下,\xc6从位开始1100,并\xe21110.开头.在UTF-8中(我非常确定这不是偶然的),您可以通过仅查看第一个字节并计算第一个字节1之前的开头位数来确定整个字符中的字节数0.所以你的第一个字符有2个字节,第二个字符有3个字节.

如果以字节开头0,则它是常规ASCII字符.

如果一个字节以10字母开头,则它是UTF-8序列的一部分(不是第一个字符).

  • 实际上,这是一个记录良好,有意识的设计决策.https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (2认同)