字符串文字前的'b'字符做什么?

跟風遠走 提交于 2019-12-30 12:53:10

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

显然,以下是有效的语法

my_string = b'The string'

我想知道:

  1. 字符串前面的b字符是什么意思?
  2. 使用它有什么作用?
  3. 在什么情况下可以使用它?

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

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

另外,出于好奇,是否还有比bu更多的符号可以执行其他操作?


#1楼

这是一个示例,其中不存在b会在Python 3.x中TypeError异常

>>> f=open("new", "wb")
>>> f.write("Hello Python!")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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.x文档

在Python 2中,前缀'b'或'B'被忽略; 它表示文字应在Python 3中变成字节文字(例如,当代码自动由2to3转换时)。 前缀“ u”或“ b”后可以带有前缀“ r”。

Python 3文档指出:

字节字面量始终以“ b”或“ B”为前缀; 它们产生字节类型而不是str类型的实例。 它们只能包含ASCII字符; 数值等于或大于128的字节必须用转义符表示。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!