运行环境:Python 2.7.13 Django 1.11.1
之前添加的文章都是随手打的英文字母,想试试添加效果,后来想真正添加文章的时候发现添加中文上传时会报错:
'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')
线上环境通过uWSGI部署的环境,需要在 wsgi.py 文件的开头加上如下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
关于为什么要reload(sys)?
因为这里的import语句可能不是sys的第一次导入语句,可能是第2、3次进行sys模块的import,这里是一个对sys的引用,只能reload才能进行重新加载。
为什么要重新加载,而直接引用过来则不能调用该函数?