UnicodeDecodeError 不明觉厉

来源:互联网 发布:mysql error 1227 编辑:程序博客网 时间:2024/05/16 01:40

好吧,这个错误困扰了我一整天。


使用 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 sysreload(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 就可以了。


以上是我的猜想。

路过的你如果觉得有什么不对,请务必留言讨论,先表谢意!我不想“自以为是地解决一个问题,知其然不知其所以然”。。。






原创粉丝点击