我知道的是:
# -*- coding: utf-8 -*-
它用于声明Python源代码文件的编码格式。一旦设置了编码名称,Python解析器将使用给定的编码来解释该文件。我称之为"文件编码"。from __future__ import unicode_literals
我正在使用Python2.7完成我的任务,并使用from __future__ import unicode_literals
来更改字符串的默认类型从"str"变为"unicode"。我称之为"字符串编码"。sys.setdefaultencoding('utf8')
但有时在Django中会出现错误,例如在管理页面中存储中文,然后访问相关页面:UnicodeEncodeError at /admin/blog/vulpaper/29/change/
'ascii' codec can't encode characters in position 6-13: ordinal not in range(128)
....更多的错误信息
The string that could not be encoded/decoded was: emcms外贸网站管理系统针对这个问题,我会在Django设置文件中编写
sys.setdefaultencoding('utf8')
来解决它。
但实际上,我不了解其中的技术细节。
让我感到困惑的是:
1. 既然我设置了Python源代码文件的编码格式,为什么还要设置字符串编码以确保我的字符串的编码是我喜爱的编码?"文件编码"和"字符串编码"有什么不同?
2. 既然我设置了"文件编码"和"字符串编码",为什么还会出现UnicodeEncodeError错误?
sys.setdefaultencoding
不太可能是任何问题的正确答案。如果您遇到该错误,则可能在您的__unicode__
方法中存在错误。 - Daniel Rosemansys.setdefaultencoding
,所以我从我的设置文件中删除了它。首先我检查了我要存储的中文字符串数据类型,它是unicode,然后我检查了模型,当我将实例方法从__str__
更改为__unicode__
时,它起作用了!我避免了UnicodeEncodeError。 - Alvin