我一直在阅读关于unicode编码的一堆阅读,特别是关于Python的。我觉得我现在对它有很强的理解,但还有一个小细节,我有点不确定。
解码如何知道字节边界?例如,假设我有一个带有两个unicode字符的unicode字符串,字节表示分别为\xc6\xb4
和\xe2\x98\x82
。然后我将此unicode字符串写入文件,因此该文件现在包含字节
\xc6\xb4\xe2\x98\x82
。现在我决定打开并读取文件(并且Python默认将文件解码为utf-8),这引出了我的主要问题。
解码如何解释字节\xc6\xb4
而不是\xc6\xb4\xe2
?
答案 0 :(得分:5)
可以根据位模式轻松确定字节边界。在您的情况下,\xc6
以1100
位开头,\xe2
以1110
开头。在UTF-8中(我非常确定这不是偶然事件),您可以通过仅查看第一个字节并在开始时计算1
位的数量来确定整个字符中的字节数在第一个0
之前。所以你的第一个字符有2个字节,第二个字符有3个字节。
如果一个字节以0
开头,则它是一个常规的ASCII字符。
如果一个字节以10
开头,则它是UTF-8序列的一部分(不是第一个字符)。