【问题标题】:Encoding "\xaf" char results in 2 encoded characters编码 "\xaf" 字符会产生 2 个编码字符
【发布时间】:2021-09-15 10:49:22
【问题描述】:

我刚刚偶然发现,如果我尝试对“\xaf”字符进行编码,则会在我的字节对象中得到一个额外的字符。当我运行此命令时的含义:

print('\xaf'.encode())

我得到以下结果:

b'\xc2\xaf'

所以我认为它可能是打印功能正在做的事情,所以我打开了 IDLE 并尝试自己运行命令并查看输出将是什么但字符仍然存在:

我真的不明白为什么会弹出这个额外的字符,如果有人能向我解释一下,我将非常感激。

提前致谢!

【问题讨论】:

  • 这就是 UTF-8 编码的工作原理。

标签: python encoding hex


【解决方案1】:

这就是UTF-8 encoding 的工作原理。您可以阅读有关here 的更多信息。所以主要思想是UTF-8使用以下规则对字符串进行编码。

  • 如果code point

  • 如果码位>= 128,则转为2的序列,
    三个或四个字节,其中序列的每个字节在 128 之间 和 255。

您的初始字符的代码点大于128(不适合一个字节),因此用两个字节编码。

注意:您可以使用ord 函数获取单字符字符串的 Unicode 代码点

>>> help(ord)
Help on built-in function ord in module builtins:

ord(c, /)
    Return the Unicode code point for a one-character string.
>>>
>>> ord('\xaf')
175
>>> list('\xaf'.encode())
[194, 175]

【讨论】:

  • "does not fit with one byte" 这有点误导。 \xaf 确实适合一个字节,甚至可以作为字节文字有效。它不适合的是一个字节其中一位用作标志,即 7 位用于数据(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2011-05-31
  • 2011-03-02
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多