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

8
我已经阅读了许多关于unicode编码的文章,特别是与Python相关的。我认为我现在对它有了相当深刻的理解,但仍有一个小细节我不太确定。
解码如何知道字节边界?例如,假设我有一个Unicode字符串,其中包含两个Unicode字符,其字节表示分别为\xc6\xb4\xe2\x98\x82。然后我将这个Unicode字符串写入文件,所以文件现在包含字节\xc6\xb4\xe2\x98\x82。现在我决定打开并读取文件(Python默认将文件解码为utf-8),这就引出了我的主要问题。
解码如何知道解释字节\xc6\xb4而不是\xc6\xb4\xe2

https://en.wikipedia.org/wiki/UTF-8 - BrenBarn
1个回答

10
字节边界可以从比特模式轻松确定。在您的情况下,\xc6 以位元 1100 开始,而 \xe21110 开始。在 UTF-8 中(我非常确定这不是偶然的),只需查看第一个字节并计算第一个 0 之前的起始处的 1 的数量,即可确定整个字符中的字节数。所以您的第一个字符有2个字节,第二个字符有3个字节。
如果一个字节以 0 开头,则它是普通的 ASCII 字符。
如果一个字节以 10 开头,则它是 UTF-8 序列的一部分(不是第一个字符)。

2
确实,这是一个有良好文献记录的、经过深思熟虑的设计决策。https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt - tripleee
@tripleee:谢谢,这就是我在寻找的链接! - Greg Hewgill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接