Django 后台添加含有中文时出现'ascii' codec can't encode characters in position 4-11: ordinal not in range(128)

来源:互联网 发布:淘宝网客服电话是多少 编辑:程序博客网 时间:2024/06/08 00:32

之前添加的文章都是随手打的英文字母,想试试添加效果,后来想真正添加文章的时候发现添加中文上传时会报错:

'ascii' codec can't encode characters in position 4-11: ordinal not in range(128)


我用getdefaultencoding()函数查询Python的编码为'ascii'编码

查了资料发现Python默认的编码方式为'ascii'编码而不是'utf-8'编码

将PyCharm的编码格式改为'utf-8'也没有用


后来找到了解决方法:在manage.py文件的开头加上如下代码:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')


关于为什么要reload(sys)?

因为这里的import语句可能不是sys的第一次导入语句,可能是第2、3次进行sys模块的import,这里是一个对sys的引用,只能reload才能进行重新加载。

为什么要重新加载,而直接引用过来则不能调用该函数?

因为setdefaultencoding()函数在被系统调用后被删除了(所以如果不重新加载,在Pycharm中显示setdefaultencoding()函数不存在),所以通过import引用进来时其实已经没有了,所以必须reload一次sys模块,这样setdefaultencoding()才会为可用,才能在代码里修改解释器当前的字符编码。

0 0
原创粉丝点击