Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UTF-8中的解码如何知道字节边界?_Python_Utf 8_Decode - Fatal编程技术网

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

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),这就引出了我的主要问题 解码如何

我已经读了很多关于unicode编码的书,特别是关于Python的。我想我现在对它有了相当深刻的理解,但还有一个小细节我有点不确定

解码如何知道字节边界?例如,假设我有一个unicode字符串,其中包含两个unicode字符,字节表示分别为
\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序列的一部分(不是第一个字符)。

事实上,这是一个有充分记录、有意识的设计决策@谢谢,这是我一直在寻找的链接!