Python UTF-8中的解码如何知道字节边界?
我已经读了很多关于unicode编码的书,特别是关于Python的。我想我现在对它有了相当深刻的理解,但还有一个小细节我有点不确定 解码如何知道字节边界?例如,假设我有一个unicode字符串,其中包含两个unicode字符,字节表示分别为Python UTF-8中的解码如何知道字节边界?,python,utf-8,decode,Python,Utf 8,Decode,我已经读了很多关于unicode编码的书,特别是关于Python的。我想我现在对它有了相当深刻的理解,但还有一个小细节我有点不确定 解码如何知道字节边界?例如,假设我有一个unicode字符串,其中包含两个unicode字符,字节表示分别为\xc6\xb4和\xe2\x98\x82。然后我将这个unicode字符串写入一个文件,因此该文件现在包含字节 \xc6\xb4\xe2\x98\x82。现在我决定打开并读取该文件(Python默认将该文件解码为utf-8),这就引出了我的主要问题 解码如何
\xc6\xb4
和\xe2\x98\x82
。然后我将这个unicode字符串写入一个文件,因此该文件现在包含字节
\xc6\xb4\xe2\x98\x82
。现在我决定打开并读取该文件(Python默认将该文件解码为utf-8),这就引出了我的主要问题
解码如何理解字节
\xc6\xb4
而不是\xc6\xb4\xe2
字节边界很容易根据位模式确定。在您的情况下,\xc6
以位1100
开头,\xe2
以1110
开头。在UTF-8中(我很确定这不是意外),您可以通过只查看第一个字节并在第一个0
之前的开始处计算1
位的数量来确定整个字符中的字节数。第一个字符有2个字节,第二个字符有3个字节
如果字节以0
开头,则它是常规ASCII字符
如果一个字节以
10开头,则它是UTF-8序列的一部分(不是第一个字符)。事实上,这是一个有充分记录、有意识的设计决策@谢谢,这是我一直在寻找的链接!