专栏名称: 33不想说话
今天看啥  ›  专栏  ›  33不想说话

遇到'latin-1' codec can't encode character '\u2028'了怎么办

33不想说话  · 掘金  ·  · 2020-04-24 06:39

文章预览

阅读 6

遇到'latin-1' codec can't encode character '\u2028'了怎么办

背景

工作中使用python的requests库做文件上传,在构建请求的过程中报错:

Debug过程

1、根据报错信息得知'latin-1'不能编码字符'\u2028',谷歌查询'\u2028'是个换行符,然而魔幻的是我在代码里的并没有看到换行符的存在;

2、接下来我们看一看Traceback,显示RequestUtil.py文件中的第31行代码调用到client.py的第1212行代码encode的时候报错了:

3、那我们不妨去看看client.py的第1212行代码到底是在encode什么的时候报错的: 在1处(client.py的第1212行)打上断点,点击2处的"小虫子",断点断住的时候点击3处继续执行,观察每次的values值。一顿操作后可以看到4处显示“application/octet-stream\u2028”,终于找到了这个“\u2028”:

4、“application/octet-stream”是我上传文件的时候设置的header中的“Content-Type”的值,然而代码中并没有看到这个“\u2028”:

5、精彩的来了,我把这行代码删除掉一个字母一个字母的手动敲了一遍,再运行一次她居然课可以了!!!本着不信邪的精神我把原来的那行代码和手动写的代码都转码了一下看到之前的那行代码果然有“\u2028”:

6、我细细思索了一下想到之前的“application/octet-stream”是我从接口文档复制过来的,打开我的文档重新试了一下,就是红框里的这个东西被我复制进去了!!!一定要小心!!!

7、至此,终于破案了!!!

总结

在写代码的过程中报错了一定要看Traceback,根据提示一步一步的找到原因,研究解决方案。不要看到错误就立刻去网上一顿瞎搜。另:写这个文章的目的是记录一下在工作中遇到的问题,同时也希望给遇到同样问题的伙伴提供一个解题思路。 最后祝大家写代码都顺顺利利呀~~~

………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览