好吧,这个错误困扰了我一整天。
使用 mysql 数据库的时候,链接的时候 ,没有声明 charset='utf8'
所以在html试图向后台post中文字符的时候,报错了,说 'latin-1' codec can't encode byte in position :
在我往链接数据库那句的参数加了 charset = 'utf8' 之后,情况有变,居然什么都打不开了,提示的是:
"UnicodeDecodeError: 'ascii' codec can't decode byte in position : ordinal not in range(128)"
当时真的太不冷静,都没有仔细去思考这个问题,马上就开始乱谷歌,结果可想而知。
一个问题,如果你不是有至少2分了解,就算你找到教程照着做解决了,下次你还是会碰壁。
所以写这文章是为了提醒自己,也是想可能会对同样在网上乱搜的同好们有所帮助吧。
我绝望了,尝试向sae的管理员po了一个建议(建议它改decoder,我也真是好傻)
就在我绝望的时候,我看到了这篇东西 http://lastranger.blog.163.com/blog/static/14126667201122511315265/
然后想了一下,修复之。现在ok了。
过了不久(从我po but report 到管理员回复,10分钟,在此我深感欣慰),新浪的管理员回复了,提的建议跟上面的文章一模一样:
修改.py文件里的默认编码
import sys
reload(sys)
sys.setdefaultencoding('utf8')
至此问题算是告一段落。
以下是总结时间。
想想整个流程,python从数据库select数据,用render的方法提取html模板,渲染之,然后display给用户,用户post数据到后台,后台再处理,放进数据库。
Q:第一次错因?
A:后台把post上来的数据(中文字 )存进了数据库,数据库默认 latin-1 编码 ,发现 encode不了一个中文字符 ,报错
Q:第二次错因?
A:改了mysql的默认字符集之后,python从数据库中提取出来的字符编码变成 'utf-8‘的了,而python默认的编码是 ascii ,报错
最后改了python的默认编码为utf-8 就可以了。
以上是我的猜想。
路过的你如果觉得有什么不对,请务必留言讨论,先表谢意!我不想“自以为是地解决一个问题,知其然不知其所以然”。。。