ISO-8859-1处理案例
主要分享的内容是对光明网 ISO-8859-1 编码的处理方式。
我在处理响应时发现返回了乱码数据,经过各种encode、decode并不能解决问题,如果强行 ignore 忽略报错会导致数据丢失。
异常网址:https://zhonghua.cloud.gmw.cn/service/search.do?
接下来分享一下我的处理方法。
根据经验和分析,此时我选择通过其他方式进行转码查看。
由于JS语言支持面向对象、命令式、声明式、函数式编程范式,并且是目前支持最多编码的语言。
所以我们先把乱码的数据放到JS中尝试解码。
打开一个控制台进行调试:
通过escape和unescape可以发现能对这串字符串进行编码。
escape编码之后返回的是urlencode百分号编码。那我们可以再次把这段urlencode编码进行解码。
接下来把相应中的乱码拿出来测试。
如: 2021æ‰‹æœºå ‰æ˜Žç½‘æ–‡ç« é¡µ_å ¨åª’ä½“ç
将其escape
然后用python进行unquote
发现已经成功解码。
所以最终处理方法为:
# -*- coding: utf-8 -*-# @Author : lx# @IDE :PyCharmimport requestsimport execjsfrom urllib import parseheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',}js = ''' function get_escape(doc){ return escape(doc); }'''url = 'https://m.gmw.cn/2022-01/20/content_1302771636.htm'doc = requests.get(url, headers=headers).textdoc = execjs.compile(js).call('get_escape', doc)doc = parse.unquote(doc)print(doc)