TypeError: Python 中没有编码的字符串参数
TypeError: string argument without an encoding in Python
当我们在没有指定编码的情况下将字符串传递给类时,会出现 Python“TypeError: string argument without an bytes
encoding”。
要解决该错误,请将编码作为第二个参数传递给该类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'))
将字符串传递给bytes
或bytearray
类时,我们还必须指定编码。
您还可以将编码作为位置参数传递给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
bytes
string
换句话说,您可以使用str.encode()
方法从str
到
bytes
和bytes.decode()
从bytes
到str
。
使用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 中的所有文本都是 Unicode,但是,编码的 Unicode 表示为二进制数据。
您可以使用str
类型来存储文本,bytes
使用类型来存储二进制数据。
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')
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: