TypeError:Python 中没有编码的字符串参数

TypeError: Python 中没有编码的字符串参数

TypeError: string argument without an encoding in Python

当我们在没有指定编码的情况下将字符串传递给类时,会出现 Python“TypeError: string argument without an bytesencoding”。

要解决该错误,请将编码作为第二个参数传递给该类bytes

没有编码的类型错误字符串参数

bytes以下是使用和
时如何发生错误的 2 个示例
bytearray

主程序
# ⛔️ TypeError: string argument without an encoding print(bytes('hello')) # ⛔️ TypeError: string argument without an encoding print(bytearray('hello'))

我们收到错误是因为我们bytes()在没有指定编码的情况下将字符串传递给类。

bytes()在类的调用中指定编码

我们可以将编码作为第二个参数传递给类。

主程序
# 👇️ b'hello' print(bytes('hello', encoding='utf-8')) # 👇️ bytearray(b'hello') print(bytearray('hello', encoding='utf-8'))

将字符串传递给bytesbytearray类时,我们还必须指定编码。

您还可以将编码作为位置参数传递给bytes
bytearray类。

# 👇️ b'hello' print(bytes('hello', 'utf-8')) # 👇️ bytearray(b'hello') print(bytearray('hello', 'utf-8'))

尽管很明显第二个参数是编码,但它仍然有点隐含并且更难阅读。

bytes类返回一个新的 bytes 对象,是范围内的不可变整数序列0 <= x < 256

bytearray
类返回字节数组,并且是同一范围内的可变整数序列

使用该str.encode()方法将字符串转换为字节

您还可以使用该str.encode方法将字符串转换为字节对象。

主程序
my_str = 'hello' my_bytes = my_str.encode('utf-8') print(my_bytes) # 👉️ b'hello'

str.encode方法将字符串编码版本作为字节对象返回。默认编码是
utf-8.

使用该bytes.decode()方法将字节对象转换为字符串

相反,您可以使用该decode()方法将字节对象转换为字符串。

主程序
my_str = 'hello' my_bytes = my_str.encode('utf-8') print(my_bytes) # 👉️ b'hello' my_str_again = my_bytes.decode('utf-8') print(my_str_again) # 👉️ 'hello'

bytes.decode方法返回从给定字节解码字符串。默认编码是utf-8.

string编码是将 a 转换为对象的过程,解码是将对象转换为 a 的过程 bytes bytesstring

换句话说,您可以使用str.encode()方法从str
bytesbytes.decode()bytesstr

使用bytes()str()类代替

您也可以使用bytes(s, encoding=...)str(b, encoding=...)

主程序
my_text = 'hello' my_binary_data = bytes(my_text, encoding='utf-8') print(my_binary_data) # 👉️ b'hello' my_text_again = str(my_binary_data, encoding='utf-8') print(my_text_again) # 👉️ 'hello'

str类返回给定对象的字符串版本如果未提供对象,则该类返回一个空字符串。

自 Python 3 以来,该语言使用文本和二进制数据的概念,而不是 Unicode 字符串和 8 位字符串。

Python 中的所有文本都是 Unicode,但是,编码的 Unicode 表示为二进制数据。

您可以使用str类型来存储文本,bytes使用类型来存储二进制数据。

在 Python 3 中,您不能再u'...'对 Unicode 文本使用文字,因为所有字符串现在都是 unicode。

但是,您必须b'...'对二进制数据使用文字。

bytes()当我们传递给或类的第一个参数bytearray()是字符串时,您还必须指定编码。

当传递给方法的第一个参数是字符串时,您只需指定编码。

如果您bytearray()使用整数或整数的可迭代对象调用该方法,则不必指定编码。

主程序
print(bytearray(5)) # 👉️ bytearray(b'\x00\x00\x00\x00\x00') print(bytearray([1, 2, 3])) # 👉️ bytearray(b'\x01\x02\x03')

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: