字符串文字前面的“b”字符有什么作用?

字符串是 Python 中最常见的数据类型之一。字符串是字符数组。这些字符可以是您现在可以通过键盘输入的任何字符。Python 字符串非常灵活并且具有强大的功能,尽管它是不可变的。但是你见过前面有字符“b”的字符串吗?有没有想过这是什么意思?

在本文中,我们将了解 b 字符串的含义,并了解如何利用它来发挥我们的优势。

什么是字符串?

字符串是字符数组。字符串中每个可能的字符都可以用 ASCII 值表示,包括换行符、制表符、退格符等元字符。Python 非常重视字符串。它甚至有一个字符串方法池来处理字符串,如果这还不够,Python 还有一个字符串模块作为其标准库的一部分,它有更多有助于字符串操作的函数。

相关:了解有关Python 中字符串的更多信息。

什么是 ASCII?

ASCII 是指美国信息交换标准代码。这是对 Unicode 字符进行编码的最常见方法。每个可能的字符只有一个对应的 ASCII 值。甚至空格、制表符、换行符或退格符也有 ASCII 值。作为程序员,我们通常处理 ASCII 值中的字符。ASCII 值只是字符的二进制表示形式的十进制表示形式。

要获取特定字符的 ASCII 值,有一个名为 的函数ord()Python 中还有一个函数chr(),用于从 ASCII 值中获取字符。

如何使用ord()chr()方法?

我们来看看如何找出字母“A”的 ASCII 值以及 ASCII 值 65 对应的字符。

1
2
print("The ASCII value of the letter 'A' is:",ord('A'))
print("The character correponding to ASCII value 65 is:",chr(65))
Python 中的 Ord 和 Chr 方法

但该ord()方法一次只能获取一个字符的 ASCII 值。如果您想要特定字符串中所有字符的 ASCII 值怎么办?实现这一点的一种方法是使用循环。

假设您有一个字符串“Welcome to AskPython”。现在您可以循环遍历整个字符串并获取每个字符的 ASCII 值。

1
2
3
string = "Welcome to askPython."
for character in string:
    print(ord(character))
打印字符串中每个字符的 ASCII 值

这样,我们就可以得到字符串中每个字符的ASCII值了。ASCII 值只是字节编码字符。这种将每个字符转换为其字节编码格式的方法既乏味又耗时。Python 还有另一个内置方法将字符串转换为其字节编码格式,以在低级别处理字符串。让我们看看如何做到这一点。

b 弦或 b””

字符串前面的 b 文字将字符串转换为字节格式。将其转换为字节格式的优点是它可以用二进制表示,然后我们可以对其执行低级任务。

如何创建 b 弦?

要创建字节字符串,我们只需在字符串前添加 ab 文字即可。

string = b"Welcome to askPython."

你怎么知道它不是普通字符串而是字节字符串?

我们可以使用该方法检查其数据类型type()

1
2
3
4
string = "Welcome to askPython."
print(type(string))
string = b"Welcome to askPython."
print(type(string))
b 字符串类型

当您检查前面带有 ab 文字的字符串的类型时,您可以看到它将类显示为bytesas 而不是string

但如果你尝试打印它,你会看到什么?

string = b"Welcome to askPython."
print(string)
打印前面带有 Ab 文字的字符串

它只是打印前面带有 ab 文字的字符串。那么这样做还有什么意义呢?

让我们看看当我们尝试访问字符串中特定索引处的字符时它会显示什么。

1
2
string = b"Welcome to askPython."
print(string[0])
在 AB 字符串中的索引处打印字符

87 是“W”的 ASCII 值。因此,当我们尝试打印字节字符串中的特定字符时,它会打印相应的 ASCII 值。这意味着索引的值为 ASCII 值,而不是实际字符。这意味着这是一个字节字符串而不是实际的字符串。因此,我们可以通过简单地迭代每个字节并将其附加到列表中来获取所有字符的 ASCII 值列表,或者我们可以简单地使用列表理解。

1
2
3
string = b"Welcome to askPython."
byte_string = [byte for byte in string]
print(byte_string)
生成字节编码字符串的字节列表

在上面的代码中,我们简单地使用 b 文字创建了一个字节字符串,然后使用列表理解来生成所有字节的列表。

相关:了解如何使用列表推导式

encode()decode()方法

encode()是一种将普通字符串转换为字节字符串的方法,decode()也是一种将字节字符串转换回普通字符串的方法。两者都是内置的Python函数,并且都有很好的计算机网络应用。它们用于对文本消息进行编码和解码,以便在计算机网络周围的不同设备上发送和接收该文本消息。让我们看看如何使用它们。

string = "Welcome to askPython."
ilist = []
for character in string:
    ilist.append(character)
print("Initial string:",ilist)
string = string.encode()
blist = []
for character in string:
    blist.append(character)
print("Encoded string:",blist)
clist = []
string = string.decode()
for character in string:
    clist.append(character)
print("Decoded string:",clist)
在Python中编码和解码

在上面的代码块中,首先,我们采用与之前相同的普通字符串格式的字符串。我们将初始字符串的每个字符存储在列表 ilist 中。然后我们使用该方法对列表进行编码encode()然后我们再次将每个字符存储在一个称为 blist 的不同列表中。我们可以看到这个列表和之前的列表是一样的。这意味着这是像以前一样的字节串。现在,当我们decode()对该字节字符串使用该方法时,我们得到了与之前相同的字符串。

相关深入学习encode()和decode()函数。

结论

字节串是当今消息传输的基础。现在我们有许多先进的编码格式,但字节字符串是一种对初学者友好且非常强大的文本编码方式。Python 使用这种字节字符串转换方法可以非常轻松地处理字符串。确保你掌握了基础知识,否则前进会变得非常困难。

参考

官方 Python 文档

堆栈溢出对同一问题的回答。