flask遇到unicodeencodeerror

错误

unicodeencodeerror ‘ascii’ codec can’t encode characters in position xx

原因

默认编码是ASCII,会把其他编码方式依然按ASCII编码来解析,然后这个编码在ASCII里面不存在,然后就报错了,所以更改编码方式即可~

解决方案

在config.py中加入

1
2
3
4
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

第4行sys.setdefaultencoding('utf-8')是设置字符串默认编码方式

那前面的reload(sys)是做什么的,明明第一行已经import sys了呢

根据python2的官方文档stackoverflow上的回答

在python解释环境初始化的时候,会自动加载site.py,site.py的代码https://github.com/python/cpython/blob/2.7/Lib/site.py

main()函数第529行处调用了setencoding(),将编码设置为ascii后,在第536和537行,将setdefaultencoding从sys模块中删除了。

所以官方文档说

Once used by the site module, it is removed from the sys module’s namespace.

那么,窝们要再想用setdefaultencoding,就需要重新载入sys模块,也就是reload(sys)

窝很可爱,请给窝钱