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

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

'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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值