显然,以下是有效的语法
my_string = b'The string'
我想知道:
字符串前面的b字符是什么意思?
使用它有什么作用?
在什么情况下可以使用它?
我在SO上找到了一个相关的问题 ,但是这个问题是关于PHP的,它指出b用于表示字符串是二进制的,与Unicode相反,Unicode是使代码与PHP版本兼容的必需< 6,移植到PHP 6时。我认为这不适用于Python。
我确实在Python网站上找到了有关以相同语法使用u字符将字符串指定为Unicode的文档 。 不幸的是,它在该文档的任何地方都没有提到b字符。
另外,出于好奇,是否还有比b和u更多的符号可以执行其他操作?
#1楼
这是一个示例,其中不存在b会在Python 3.x中TypeError异常
>>> f=open("new", "wb")
>>> f.write("Hello Python!")
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' does not support the buffer interface
添加b前缀将解决此问题。
#2楼
除了其他人所说的以外,请注意unicode中的单个字符可以由多个字节组成 。
unicode的工作方式是采用旧的ASCII格式(7位代码,看起来像0xxx xxxx),并添加了多字节序列 ,其中所有字节均以1(1xxx xxxx)开头,以表示超出ASCII的字符,因此Unicode 向后-与ASCII 兼容 。
>>> len('Öl') # German word for 'oil' with 2 characters
2
>>> 'Öl'.encode('UTF-8') # convert str to bytes
b'\xc3\x96l'
>>> len('Öl'.encode('UTF-8')) # 3 bytes encode 2 characters !
3
#3楼
从服务器端,如果我们发送任何响应,它将以字节类型的形式发送,因此它将在客户端显示为b'Response from server'
为了摆脱b'....'只需使用以下代码:
服务器文件:
stri="Response from server"
c.send(stri.encode())
客户端文件:
print(s.recv(1024).decode())
然后它将打印Response from server
#4楼
您可以使用JSON将其转换为字典
import json
data = b'{"key":"value"}'
print(json.loads(data))
{“核心价值”}
烧瓶:
这是烧瓶的一个例子。 在终端行上运行此命令:
import requests
requests.post(url='http://localhost(example)/',json={'key':'value'})
在flask / 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)
{'核心价值'}
#5楼
在Python 2中,前缀'b'或'B'被忽略; 它表示文字应在Python 3中变成字节文字(例如,当代码自动由2to3转换时)。 前缀“ u”或“ b”后可以带有前缀“ r”。
字节字面量始终以“ b”或“ B”为前缀; 它们产生字节类型而不是str类型的实例。 它们只能包含ASCII字符; 数值等于或大于128的字节必须用转义符表示。