python3中bytes和string之间的互相转换
前言 Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然). python3.0中怎么创建bytes型数据 bytes([1,2,3,4,5,6,7,8,9]) bytes("python", 'ascii') # 字符串,编码 首先来设置一个原始的字符串, Python 3.2.3 (d 在Python 3中,`str`和`bytes`是两种完全不同的数据类型,它们分别用于表示文本和二进制数据。这种明确的区分是Python 3的重要特性之一,旨在避免因混合使用两种类型而导致的混淆和错误。 1. **文本与Unicode**: - `str`类型用于存储文本,它总是基于Unicode编码,可以处理世界上几乎所有的字符集。Unicode是一种国际标准,能够表示世界上大多数语言的字符。 - 例如:`website = '//www.jb51.net/'` 是一个`str`类型的字符串。 2. **二进制数据与bytes**: - `bytes`类型用于存储二进制数据,如图片、音频文件或网络传输的数据,它是一系列整数的序列,每个整数的范围通常在0到255之间。 - 创建`bytes`对象有多种方式,如`bytes([1,2,3,4,5,6,7,8,9])` 或 `bytes("python", 'ascii')`。后者将字符串按照指定的编码(这里是ASCII)转换为`bytes`。 3. **编码与解码**: - **编码**:将`str`转换为`bytes`,需要指定一个编码格式。例如,使用`encode`方法将`str`按照UTF-8编码:`website_bytes_utf8 = website.encode(encoding="utf-8")`,结果是一个`bytes`对象。 - **解码**:相反,将`bytes`转换回`str`,使用`decode`方法,同样需指定解码格式:`website_string = website_bytes_utf8.decode()`。若不指定编码,Python通常会使用默认的UTF-8进行解码。 4. **不同编码间的转换**: - 当需要在不同的字符编码之间转换时,需要注意兼容性问题。例如,将`bytes`对象`website_bytes_gb2312`使用GB2312解码:`website_string_gb2312 = website_bytes_gb2312.decode("gb2312")`。 5. **类型检查**: - 使用`type()`函数可以检查变量的类型,如`type(website)`返回`<class 'str'>`,`type(website_bytes_utf8)`返回`<class 'bytes'>`。 6. **操作限制**: - Python 3不允许直接混合操作`str`和`bytes`,例如,不能直接拼接字符串和字节序列,也不能在字节序列中搜索字符串,因为它们代表的数据类型完全不同。 7. **注意事项**: - 当处理网络数据或文件时,务必清楚数据是以哪种编码(如UTF-8、GBK等)传输或存储,否则解码时可能会遇到乱码问题。 - 在进行编码和解码时,确保知道正确的编码格式,否则可能导致错误。 理解和熟练掌握`str`和`bytes`之间的转换是Python 3编程中至关重要的,尤其是在处理文本数据和二进制数据交互的场景下。正确地使用编码和解码能确保数据的准确性和程序的健壮性。在实际开发中,要时刻注意数据类型,避免因为类型不匹配导致的错误。