【问题标题】:UnicodeDecodeError when using django forms使用 django 表单时出现 UnicodeDecodeError
【发布时间】:2015-03-04 19:20:35
【问题描述】:

我正在尝试在 django 中呈现表单并遇到 UnicodeDecodeError:'ascii' codec can't decode byte 0xe7

下面是我的forms.py:

from models import Country, Question
class QuestionForm(forms.ModelForm):
  ...
  country=forms.ModelMultipleChoiceField(queryset=Country.objects.all())
  # The above queryset will return a list of names in Chinese
  class Meta:
    model=Question
    field=(...,'country')

还有,我的 models.py

class Country(models.Model):
  country_name=models.CharField(max_length=100)
  country_pic=models.ImageField(upload_to='country_pic/')

  def __unicode__(self):
      return self.country_name

class Question(models.Model):
  country=models.ForeignKey(Country)
  question_title=models.CharField(max_length=100)

  def __unicode__(self):
      return self.question_title

我还在每个文件中添加了#coding: utf-8,但这并不能解决问题


以下是错误信息:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/website/add_question/

Django Version: 1.7.4
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'website')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/qiaoweiliu/Desktop/FinalProject/ask/website/views.py" in add_question
  64.         if form.is_valid():
File "/Library/Python/2.7/site-packages/django/forms/forms.py" in is_valid
  162.         return self.is_bound and not bool(self.errors)
File "/Library/Python/2.7/site-packages/django/forms/forms.py" in errors
  154.             self.full_clean()
File "/Library/Python/2.7/site-packages/django/forms/forms.py" in full_clean
  355.         self._post_clean()
File "/Library/Python/2.7/site-packages/django/forms/models.py" in _post_clean
  406.         self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
File "/Library/Python/2.7/site-packages/django/forms/models.py" in construct_instance
  60.             f.save_form_data(instance, cleaned_data[f.name])
File "/Library/Python/2.7/site-packages/django/db/models/fields/__init__.py" in save_form_data
  804.         setattr(instance, self.name, data)
File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in __set__
  597.                     self.field.rel.to._meta.object_name,

Exception Type: UnicodeDecodeError at /website/add_question/
Exception Value: 'ascii' codec can't decode byte 0xe7 in position 11: ordinal not in range(128

【问题讨论】:

  • 能否发布您的完整回溯?
  • 欢迎来到 StackOverflow!你能包括错误堆栈跟踪吗?
  • 谢谢大家,stackoverflow 的新手...
  • 你能把Question模型的代码贴出来吗?
  • 我认为在脚本顶部显式声明您的编码仅有助于处理脚本本身中的中文文本,就像您在文件中实际键入了中文字符一样,而不是处理任何来自其他来源的字符串。

标签: python django


【解决方案1】:

我对 Django 没有太多经验,但是在 Python 中处理中文文本时,我已经处理了很多这个异常。通常您需要将 decode() 与中文编解码器一起使用。我发现'gb18030' 的工作频率最高。例如,如果你有一个变量foo 保存中文字符串,试试foo.decode('gb18030')

【讨论】:

    【解决方案2】:

    我知道这有点旧,但我能够解决类似的错误,在 forms.py 顶部使用以下行:

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    

    这里报告了一个类似的错误: UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2018-09-09
      • 1970-01-01
      • 2019-06-17
      • 2019-01-10
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多