chr()和ord()与str和bytes有什么关系?

7
我发现 Python 3 文档中关于 chrord 的解释与这两种主要的文本数据类型 strbytes 的关系有些不清晰。也许是我想太多了。
以下是我认为可能发生的事情,但你能告诉我是否正确吗?
  • ord()接受一个单字符的str作为输入,返回一个int。输入的str和Python 3中的任何其他str一样。特别地,它并不是以UTF-8等特定Unicode格式编码的bytes,而是在Python内部使用str格式表示Unicode代码点。
  • chr()接受一个int作为输入,并返回一个单字符的str。返回的str和Python中的其他str一样,同样也不是使用bytes的特定编码方式。
  • 在任何时候,ord()chr()都不涉及bytes,也不涉及像UTF-8这样的特定Unicode格式,它们只涉及Python内部的str表示,该表示更抽象地处理Unicode代码点。

1
你说得没错。但是也要查看ordchr的官方文档。 - Robᵩ
我想说你是对的,但出于某种奇怪的原因,ord函数也适用于字节类型... - Aran-Fey
@Aran-Fey 这是有道理的,因为 ord() 应该能够确定来自 [0-255] 的单个字节的偏移量。但是,对于 UTF-8 或任何其他表示中的多字节字符,ord() 将无法处理整个序列。 - Alex Huszagh
@IgnacioVazquez-Abrams - 我不这么认为。考虑到 ord(b'\xe2') == 0xe2。鉴于我的默认编码是utf8,没有有效的转换可用。 - Robᵩ
1个回答

1

你是正确的。

ord()chr() 仅处理单个字符的字符串。

它们的文档非常清楚:

>>> help(ord)
ord(c, /)
    Return the Unicode code point for a one-character string.

>>> help(chr)
chr(i, /)
    Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.

使用 str.encode / bytes.decode 进行字节转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接