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

时间:2014-06-09 04:01:34

标签: python utf-8 decode

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

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

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

1 个答案:

答案 0 :(得分:5)

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

如果一个字节以0开头,则它是一个常规的ASCII字符。

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