185、Unicode 编码的奇幻漂流:UnicodeDecodeError 根治方案与 chardet 检测 185、Unicode 编码的奇幻漂流:UnicodeDecodeError 根治方案与 chardet 检测一个让我熬夜到凌晨三点的Bug去年秋天,我接手了一个爬虫项目。数据源来自十几个不同国家的网站,有日文的Shift-JIS、俄文的CP1251、还有一堆不知道什么编码的古老论坛。代码跑起来,前十分钟一切正常,然后突然炸了:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 1234: invalid start byte当时我盯着屏幕,脑子里只有一个念头:又是编码问题。更崩溃的是,这个错误不是每次都出现,而是随机触发——因为不同页面返回的编码不一样。我试着用errors='ignore'跳过,结果数据里全是乱码,客户直接截图发群里问"这是什么火星文"。从那以后,我彻底明白了:编码问题不是靠try-except能糊弄过去的。今天这篇笔记,就是我当时踩坑后的完整复盘。编码的底层逻辑:为什么你的字符串会"碎掉"先别急着看解决方案,理解编码的本质才能根治问题。Python 3里,字符串是Unicode对象,但文件、网络数据、数据库返回的都是字节流。当你用open()读文件或用requests.get()