python - python字符串之前的b前缀是什么意思?

标签 python syntax python-3.x byte

在一个 python 源代码中,我偶然发现了一个小的 b 在字符串之前,例如:

b"abcdef"

我知道表示 unicode 字符串的 u 前缀和表示原始字符串的 r 前缀文字。

b 代表什么以及它在哪种源代码中有用,因为它似乎完全像没有任何前缀的纯字符串?

最佳答案

b 前缀表示 bytes string literal .

如果您看到它在 Python 3 源代码中使用,该表达式会创建一个 bytes object ,而不是常规的 Unicode str object .如果您看到它在您的 Python shell 中回显,或者作为列表、字典或其他容器内容的一部分,那么您会看到使用此表示法表示的 bytes 对象。

bytes 对象基本上包含 0-255 范围内的整数序列,但在表示时,Python 将这些字节显示为 ASCII codepoints以便于阅读其内容。 printable range of ASCII characters 之外的任何字节显示为转义序列(例如 \n\x82 等)。相反,您可以同时使用 ASCII 字符和转义序列来定义字节值;对于 ASCII 值,使用它们的数值(例如 b'A' == b'\x41')

因为 bytes 对象由整数序列组成,您可以从任何其他整数序列构造一个 bytes 对象,其值在 0-255 范围内,例如一个列表:

bytes([72, 101, 108, 108, 111])

索引会返回整数(但切片会产生新的 bytes 值;对于上面的示例,value[0] 会返回 72,但 value[:1]b'H',因为 72 是大写字母 H 的 ASCII 码点)。

bytes 模型二进制数据,包括编码文本。如果您的 bytes 值确实包含文本,则需要首先使用正确的编解码器对其进行解码。例如,如果数据编码为 UTF-8,您可以通过以下方式获取 Unicode str 值:

strvalue = bytesvalue.decode('utf-8')

相反,要将 str 对象中的文本转换为 bytes,您需要 encode。您需要决定要使用的编码;默认是使用 UTF-8,但您需要的是高度依赖于您的用例:

bytesvalue = strvalue.encode('utf-8')

您也可以使用构造函数 bytes(strvalue, encoding) 来做同样的事情。

解码和编码方法都需要一个额外的参数到 specify how errors should be handled .

Python 2 版本 2.6 和 2.7 还支持使用 b'..' 字符串文字语法创建字符串文字,以简化适用于 Python 2 和 3 的代码。

bytes 对象是不可变的,就像 str 字符串一样。使用 bytearray() object如果你需要一个可变的字节值。

关于python - python字符串之前的b前缀是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592764/

相关文章:

python - 使用单选小部件从模型选择字段中删除 "---------"

python - 类型错误 : 'set' object does not support indexing

python-3.x - 在一行中打印二叉树的最佳方法?

python - 如何确定两个句子是否谈论相似的主题?

python - 使用 Rauth 和 Django 正确创建 OAuth2Service

从 Windows 复制到 Linux 后,python 代码无法正常工作

c++ - 引用使用 Union

python - 制作一个简单的《太空侵略者》克隆——pygame.time.delay 导致崩溃

php - 意外的 T_VARIABLE,为什么我的下拉列表找不到我创建的变量?

python-3.x - Pandas read_excel 删除空标题下的列