2013-04-03 4 views
3

Я работаю над скриптом ajax в views.py django 1.5. после сборки моего json-файла, я должен поместить имя пользователя в файлы cookie. Название имеет название французского акцента, типа 'hervé'. Это часть моего кодаUnicodeEncodeError: кодек ascii не может кодировать символ u ' xe9'

if user.is_active: 
      login(request, user) 
      name = 'Hervé' 
      jsondict['success'] = True 
      jsondict['text']['welcome'] = 'Bienvenue, %s!' % name 

      if name: 
       fn = name 
    response = HttpResponse(json.dumps(jsondict, cls=DjangoJSONEncoder, ensure_ascii=False),mimetype='application/json') 
    if fn: 
     set_cookie(response,"full_name",fn) 

ошибка, которая появляется в

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128) 

решить эту я использовать Юникод(), расшифровывает() ... но изменить ничего. Произошла ли ошибка из set_cookie() fonction? или json-файл? что я могу сделать, чтобы решить эту проблему?

это set_cookies функция

def set_cookie(response, key, value, days_expire = 7): 
import datetime 
from django.conf import settings 
if days_expire is None: 
    max_age = 365 * 24 * 60 * 60 #one year 
else: 
    max_age = days_expire * 24 * 60 * 60 
expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT") 
response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None) 
+0

'jsondict [ 'текст'] [ 'добро'] = u'Bienvenue,% S! ' % (user.get_full_name(),) '(обратите внимание на u '') ... может быть? не уверен ... Было бы полезно, если бы вы использовали константу, чтобы мы могли ее воспроизвести ... –

+0

использовать константу как? как это? cnst = u'Bienvenue,% s! ' % (user.get_full_name(),) jsondict ['text'] ['welcome'] = cnst –

+0

как 'blah = 'некоторый текст, который имеет в нем юникод!'' ... в основном сделать пример, который мы можем run –

ответ

1

Хорошо, теперь я установил его. В голове вашего views.py, поставить этот интерпретатор

# -*- coding: latin-1 -*- 

Тогда в вашей функции,

name = 'Hervé' 
name.decode('latin-1').encode('ascii','xmlcharrefreplace') //add this line 
jsondict['success'] = True 
jsondict['text']['welcome'] = 'Bienvenue, %s!' % name 
+0

я удаляю его, я обновляю трассировку здесь http://pastebin.com/hNAjh7jd –

+0

OK Я постараюсь найти решение для этого – catherine

+0

ответить обновлено , – catherine