解决中文乱码问题

r.apparent_encoding
    从响应正文中分析出的响应内容的编码方式(utf-8,gbk)
r.encoding
    从请求头中分析的响应内容编码方式,是当前r.text显示时使用的编码方式
    一般用于设置响应内容(r.text)的编码方式,常用于解决中文乱码问题
    设置响应内容的编码方式(放在r.text之前)
        r.encoding=r.apparent_encoding
        r.encoding='gb2312'

查看百度页面的字符编码

"""
   查看百度页面的字符编码,并显示中文字符
"""
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
# 解决中文乱码
print(r.apparent_encoding) # 猜测响应正文中的字符编码
print(r.encoding)# 请求头中的字符编码,是r.text使用的编码
# 第一种
# r.encoding = r.apparent_encoding
# 第二种
r.encoding = 'utf-8'
# utf-8(一个汉字占三个) gb2312(一个汉字占两个) gbk
# r.encoding = 'gb2312'# 不可以使用 字符编码不能随便写
# 应该与apparent_encoding或者与encoding一致
print(r.text)

解决汉字乱码的方案:

1)使用r.encoding=r.apparent_encoding
2) r.encoding=字符集
例如:utf-8、gbk、gb2312(繁体中文),但是应该与r.encoding或r.apparent_encoding保持一致
注意:字符集的设定放在r.text之前

encode、decode

encode(编码)将字符转为字节/二进制形式
        字符串.encode(字符集)
decode(解码)将字节/二进制转为字符
        字节数据.decode(字符集)
编码、解码的字符集应该一致

对字符串进行编码和解码

"""
    对一个字符串进行编码和解码
"""
a = '中国'
b = a.encode('utf-8')#编码:字符边二进制
print(b)
# \x 十六进制 0123456789ABCDEF
# e4 e是14
# e4= 14*16+4 = 160 + 4 + 64 = 228 计算机基础知识了解即可
# 中国在内存中存为\xe4\xb8\xad\xe5\x9b\xbd的二进制
c = a.encode('gb2312')
print(c)
# 中国在内存中存为\xd6\xd0\xb9\xfa的二进制
d = b.decode('utf-8')# 解码 二进制变字符
print(d)
e = c.decode('gb2312')
print(e)
# 编码和解码的字符集不匹配,则无法正常显示汉字
f = b.decode('gb2312') # 解码 : 二进制变字符
print(f) #UnicodeDecodeError解码失败错误

编码与解码总结

encode是编码,更多的用于将汉字存为二进制,decode是将二进制转为字符(比如汉字)
   注意:解码时的字符集应该与编码时使用的字符集保持一致,否则解码失败,汉字不能正常显示出来



作者:暄总-tester