本文共 2506 字,大约阅读时间需要 8 分钟。
安装了Django Suit 后,运行服务器时在表单页面输入中文保存时出现 UnicodeEncodeError。错误提示为:
UnicodeEncodeError at /admin/ModelApp/server/1/change/'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
错误发生在 Django 1.11.5 版本下,Python 2.7.13。
原因分析:此类错误通常由 Python 的默认编码方式引起。由于 Python 的默认编码是 ASCII,无法支持某些 UTF-8 字符,尤其是中文字符。因此,需要通过设置 Python 的默认编码来解决问题。
解决方法:
设置默认编码:在 manage.py 的开头加入以下代码:
import sysreload(sys)sys.setdefaultencoding('utf8')
确保以上代码在 manage.py 的顶部,通常放置在包名或模块名之前的位置。
检查和确认环境设置:
DJANGO_SETTINGS_MODULE=your_settingspython manage.py runserver
确保没有其他潜在问题:
use_native=True
以保留原始数据。代码示例:
# -*- coding: utf-8 -*-import sysimport os# 设置默认编码reload(sys)sys.setdefaultencoding('utf8')if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed " "and available on your PYTHONPATH environment variable? Did " "you forget to activate a virtual environment?" ) try: import django except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed " "and available on your PYTHONPATH environment variable? Did " "you forget to activate a virtual environment?" ) execute_from_command_line(sys.argv)
需要更新为:
# -*- coding: utf-8 -*-import osimport sys# 设置默认编码reload(sys)sys.setdefaultencoding('utf-8')if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed " "and available on your PYTHONPATH environment variable? Did " "you forget to activate a virtual environment?" ) try: import django except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed " "and available on your PYTHONPATH environment variable? Did " "you forget to activate a virtual environment?" ) execute_from_command_line(sys.argv)
这段代码添加了正确的 UTF-8 编码设置,并确保了 DJango 的正确导入机制。这样可以有效解决编码问题,允许在 Django 管理页面中使用中文。
转载地址:http://oveyk.baihongyu.com/