显然,以下是有效的语法:

b'The string'

我想知道:

字符串前面的b是什么意思? 使用它的效果是什么? 在什么情况下使用它比较合适?

我在SO上找到了一个相关的问题,但这个问题是关于PHP的,它指出b是用来表示字符串是二进制的,而不是Unicode,这是需要代码从PHP < 6版本兼容,当迁移到PHP 6时。我不认为这适用于Python。

我确实在Python网站上找到了这个文档,是关于使用u字符以相同的语法指定字符串作为Unicode的。不幸的是,该文档中没有任何地方提到b字符。

另外,出于好奇,除了b和u还有别的符号吗?


当前回答

b表示字节字符串。

字节是实际的数据。字符串是一种抽象。

如果你有一个多字符的字符串对象,你取一个字符,它将是一个字符串,它的大小可能超过1字节,这取决于编码。

如果使用字节字符串的1个字节,您将得到一个从0-255的8位值,如果这些字符由于编码是> 1字节,那么它可能不代表一个完整的字符。

TBH我会使用字符串,除非我有一些特定的低级别的理由使用字节。

其他回答

您可以使用JSON将其转换为字典

import json
data = b'{"key":"value"}'
print(json.loads(data))

{“关键”:“价值”}


瓶:

这是一个flask的例子。在终端行上运行:

import requests
requests.post(url='http://localhost(example)/',json={'key':'value'})

瓶/ routes.py

@app.route('/', methods=['POST'])
def api_script_add():
    print(request.data) # --> b'{"hi":"Hello"}'
    print(json.loads(request.data))
return json.loads(request.data)

{“关键”:“价值”}

问题的答案是:

data.encode()

为了解码它(去掉b,因为有时候你不需要它)

use:

data.decode()

引用Python 2。x文档:

前缀'b'或'b'会被忽略 Python 2;它表明 字面量应该变成字节字面量 在Python 3中(例如,当代码是 自动转换为2to3)。一个 'u'或'b'前缀后面可以跟着 一个'r'前缀。

Python 3文档声明:

字节字面值总是以'b'或'b'作为前缀;它们生成bytes类型的实例,而不是STR类型的实例。它们可能只包含ASCII字符;数值为128或更大的字节必须用转义来表示。

它将其转换为bytes字面值(或2.x中的str),并且对2.6+有效。

r前缀导致反斜杠“未解释”(不会被忽略,两者之间的差异很重要)。

Bytes (somestring.encode())是在python 3中为我工作的解决方案。

def compare_types():
    output = b'sometext'
    print(output)
    print(type(output))


    somestring = 'sometext'
    encoded_string = somestring.encode()
    output = bytes(encoded_string)
    print(output)
    print(type(output))


compare_types()