Python-解决中文乱码

Python3中,字符串默认的编码为Unicode。

Python的字符编码

encode的作用是将Unicode编码转换成其他的编码的字符串,而decode的作用是将其他编码的字符串转换成Unicode编码。

解决中文编码问题

中文乱码会出现的几种情况:

  • 问题1,使用requests获得网站内容后,发现中文显示乱码。
  • 问题2,将某个字符串decode时,字符串中有非法字符,程序抛出异常。
  • 问题3,网页使用gzip压缩,解析网页数据的时候中文不乱码显示。
  • 问题4,写入和读取文件的时候,文件显示的字符串不是正确的中文。
问题1,获取网站的中文显示乱码
import requests
from bs4 import BeautifulSoup

url = 'https://www.w3school.com.cn/'
r = requests.get(url)
r.encoding = 'gb2312'
soup = BeautifulSoup(r.text, 'lxml')
xx = soup.find('div', id='d1').h2.text
print(xx)
问题2,非法字符串抛出异常

出错的原因是某些网站的编码不规范,在一个页面混入了多种编码,于是出现了非法字符。这种情况的出现会让整个爬虫程序出错,然后停止运行。

解决方法很简单,可以采用ignore忽略这些非法字符。

str1.decode('GBK', 'ignore')

第二个变量为控制错误处理的方式,默认为strict,遇到非法字符时会抛出异常。

可以把第二个参数设置为其他变量,有以下三种:

  • ignore,忽略其中的非法字符,仅显示有效字符。
  • replace,使用符号代替非法字符。
  • xmlcharrefreplace,使用xml字符引用代替非法字符。
问题3,网页使用gzip压缩

使用r.content会自动解码gzip和deflate传输编码的响应数据。

import chardet
import requests

url = 'https://www.sina.com.cn/'
r = requests.get(url)
after_gzip = r.content

# 找出字符串的编码方式 为 utf-8
text = chardet.detect(after_gzip)

print(after_gzip.decode('utf-8'))
问题4,读写文件中的中文乱码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值