GBK解码:非法字符的解决方案
541 字
3 分钟
GBK解码:非法字符的解决方案
GBK大魔王的日常刁难
Python爬虫下载了一个中文网页,用UTF-8解码爆红字堆满屏幕,切换GBK解码——“UnicodeDecodeError
错误成因
核心原因是编码字节和实际内容编码之间发生了不完全一致的扭曲。网页声明了编码为GBK,但页面某个角落有一小段内容是后端模板在拼接时无意间塞入了一个UTF-8字符或者用户提交的字段含emoji。GBK解释器遇到那个不认识的字节组合当场拒绝处理。
解决方案
errors参数(最快速)
text = raw_bytes.decode("gbk", errors="ignore") # 忽略非法字符直接跳过损失干净度但完成度最高text = raw_bytes.decode("gbk", errors="replace") # 用标准替代符号填补缺失位保留结构完整ignore方案简单粗暴适合正文提取,replace方案更适合需要保留文本长度和段落结构的信息提取与渲染。
尝试多种编码降级和回退组合
按优先级逐级尝试解码,哪个先成功就用哪个结果。可靠性最高,适合URL结构多样且编码背景未知的批量抓取任务。
使用ftfy/chardet自动修复和检测
chardet基于统计模型检测原始字节的真实编码可信度;ftfy不仅做编码检测,还会主动修复错乱的双重编码等一系列遗留乱码。直接喂bytes给ftfy,它自动识别和修复。
后续预防
统一采集管线全部以UTF-8为唯一编码标准,从源头掐断各种混乱编码的统一处理成本。所有下载后的数据先在采集入口统一转码成UTF-8格式存储,后续所有处理环节都只面对一种一致的编码。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
GBK解码:非法字符的解决方案
https://blog-astro-ddd.vercel.app/posts/gbk-decode-fix/相关文章智能推荐
1
从 Hugo 和 Next.js 回到 Astro 7:一次博客重构复盘
技术笔记记录博客从 Hugo、Next.js 回到 Astro 7 的重构过程,包括框架升级、移动端性能、图片优化、Swup 状态问题和 Vercel 部署。
2
太平山顶:从缆车到维港夜景的完整游览思路
生活太平山顶的交通、观景位置、步行路线和夜景时间安排,适合第一次去香港的游客参考。
3
香港国际机场 T2:航站楼定位、接驳和出行提示
交通香港国际机场 T2 航站楼的定位、与 T1 的关系、交通接驳和出发前需要确认的事项。
4
腾讯滨海大厦:深圳科技园区的标志性建筑
生活腾讯滨海大厦的位置、建筑形态和园区观察,介绍这座深圳科技企业总部建筑的公共印象。
5
香港迪士尼一日游:交通、园区和夜间演出怎么安排
生活香港迪士尼乐园的交通、园区分区、项目安排和夜间演出攻略,适合第一次规划一日游的游客参考。
随机文章随机推荐


