自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
语法参考
解码是将字节流转换成字符串(文本),其他编码格式转成unicode。在Python中提供了decode()方法,该方法的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。decode()方法的语法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
参数说明:
l bytes:表示要进行转换的字节数据,通常是encode()方法转换的结果。
l encoding="utf-8":可选参数,用于指定进行解码时采用的字符编码,默认为utf-8,如果想使用简体中文可以设置为gbk或gb2312(与网站使用的编码方式有关)。当只有一个参数时,可省略前面的“encoding=”,直接写编码。
注意:在设置解码采用的字符编码时,需要与编码时采用的字符编码一致,如果不一致程序会出现错误提示,此时可以更换编码方式。
l errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。
快用锦囊
锦囊1 对指定的字符串进行解码
对指定的字符串进行解码,代码如下:
#定义字节编码
Bytes1=bytes(b'\xe6\x88\x91\xe7\x88\xb1Python')
#定义字节编码
Bytes2=bytes(b'\xce\xd2\xb0\xaePython')
str1=Bytes1.decode("utf-8")#进行utf-8解码
str2=Bytes2.decode("gbk") #进行gbk解码
print(str1) #输出utf-8解码后的内容
print(str2) #输出gbk解码后的内容
运行程序,输出结果为:
我爱Python
我爱Python
锦囊2 操作不同编码格式的文件
建立一个文件test5.txt,文件格式为ANSI,内容如下:
机器码:NH57Q35XD5MZVI7ZWL7H2UX0I
用户名称:MZRCE44HHKBQ
用Python来读取,代码如下:
# coding=gbk
#用python来读取
print(open('./tmp/test5.txt').read())
运行程序,输出结果为:
机器码:NH57Q35XD5MZVI7ZWL7H2UX0I
用户名称:MZRCE44HHKBQ
将test5.txt另存为test51.txt,并将编码格式改为utf-8,再使用Python读取test51.txt,代码如下:
#用python读取uft-8编码格式的文本文件
f=open('./tmp/test51.txt','rb')
s=f.read()
f.close()
print(s)
运行程序,输出结果为:
b'\xef\xbb\xbf\xe6\x9c\xba\xe5\x99\xa8\xe7\xa0\x81\xef\xbc\x9aNH57Q35XD5MZVI7ZWL7H2UX0I\r\n\xe7\x94\xa8\xe6\x88\xb7\xe5\x90\x8d\xe7\xa7\xb0:MZRCE44HHKBQ \r\n'
此时出现了乱码,这是由于字符经过不同编码解码再编码的过程中使用的编码格式不一致导致的。那么,接下来我们使用decode()方法进行解码,代码如下:
print(s.decode('utf-8')) #使用decode()方法解码并输出
运行程序,输出结果为:
机器码:NH57Q35XD5MZVI7ZWL7H2UX0I
用户名称:MZRCE44HHKBQ
应用场景
场景一:解码爬虫获取的字节形式代码
在使用python爬取指定的网页时,获取的内容中,如果汉字都是字节码的情况下,可以通过decode()方法实现html代码的解码工作。代码如下:
import requests # 网络请求模块
# 对爬取目标发送网络请求
response = requests.get('https://www.baidu.com/')
html_bytes = response.content # 获取爬取的内容,该内容为字节形式
print(html_bytes) # 打印字节形式的html代码
print(html_bytes.decode('utf-8')) # 打印解码后的html代码
运行程序,输出结果中字节形式<title>标签的内容如下:
<title>\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb0\xb1\xe7\x9f\xa5\xe9\x81\x93</title>
输出结果中解码后<title>标签的内容如下:
<title>百度一下,你就知道</title>