【问题标题】:How does decoding in UTF-8 know the byte boundaries?UTF-8 中的解码如何知道字节边界?
【发布时间】:2014-06-09 04:01:33
【问题描述】:

我一直在阅读大量有关 unicode 编码的资料,尤其是关于 Python 的资料。我想我现在对它有了相当深刻的理解,但还有一个小细节我有点不确定。

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

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

【问题讨论】:

标签: python utf-8 decode


【解决方案1】:

字节边界很容易从位模式中确定。在您的情况下,\xc6 以位 1100 开头,\xe21110 开头。在 UTF-8 中(我很确定这不是偶然的),您可以通过仅查看第一个字节并计算开头之前的 1 位的数量来确定整个字符中的字节数第一个0。所以你的第一个字符有 2 个字节,第二个字符有 3 个字节。

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

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

【讨论】:

猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 2020-07-17
  • 2019-11-10
相关资源
最近更新 更多