带有JSON的UnicodeDecodeError

时间:2011-11-27 21:17:09

标签: django json

我只是想从我正在生成的哈希列表中生成一些JSON。这是列表中每个对象的样子:

{ 'name': unicode(name) }

以下是我如何序列化它:

import simplejson as json

return HttpResponse(LazyEncoder().encode(output_list, ensure_ascii=False), mimetype="application/json")

class LazyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Promise):
            return force_unicode(obj)
        return super(LazyEncoder, self).default(obj)

建议使用这个懒惰的编码器by the Django docs here.

这是我得到的错误:

UnicodeDecodeError at /territories
'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)

为什么它尝试编码为ascii,即使我明确地问它

堆栈跟踪:

Request Method: GET
Request URL: http://localhost:8001/territories

Django Version: 1.3
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'locality']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/home/rfkrocktk/Desktop/locality/eggs/Django-1.3-py2.7.egg/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/rfkrocktk/Desktop/locality/src/locality/views.py" in generate_territories
  36.   output.extend(create_territories("IT", it_province.PROVINCE_CHOICES))
File "/home/rfkrocktk/Desktop/locality/src/locality/views.py" in create_territories
  50.       result.append({ 'abbr': unicode(territory[0]), 'name': unicode(territory[1]), 'country': country.id})

Exception Type: UnicodeDecodeError at /territories
Exception Value: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)

2 个答案:

答案 0 :(得分:0)

试试mimetype='application/json; charset=utf-8'。也许它很开心。

答案 1 :(得分:0)

出于某种原因,当我在字符串周围删除对unicode()的调用时,它有效。无论如何,只要它有效:)