Django заменяет символы не-ascii на \ ufffd - PullRequest
4 голосов
/ 21 апреля 2011

В рамках моего проекта, когда я отправляю в форму некоторые данные с символами, отличными от ascii, я заменяю все данные, не относящиеся к ascii, символом замены unicode \ ufffd.В представлении, которое получает данные из формы, у меня есть эта искаженная строка в request.POST.Кажется, я что-то упустил очевидное.

Моя среда:

  • Python 2.6
  • Django 1.3 alpha 1
  • MySQL 5.1, база данных использует UTF-8 charset

Воспроизводили эту проблему, используя локальный сервер разработки и промежуточный сервер с Apache + mod_wsgi, с Firefox 4 и Chrome 11.

Где мне искать решение проблемы?Спасибо.

Обновление: ниже указан код, который я использую -

@render_to('mail/new_message.html')
@login_required
def new_message(request, user_id):
    user = request.user

    if request.method == 'POST':
        form = MessageForm(request.POST, request.FILES)
        # exclude attachment from init instance, because we need instance id
        # for saving attachment
        form._meta.exclude = ['attachment']
        if form.is_valid():
            new_msg = form.save()
            new_msg.sender = user
            if form.cleaned_data['attachment']:
                new_msg.attachment = form.cleaned_data['attachment']
            new_msg.save()
            message_sent.send(sender=None,instance=new_msg)
            return HttpResponseRedirect(reverse(messages))
    else:
        initial = {}
        if user_id:
            initial['receivers'] = [user_id,]
        form = MessageForm(initial=initial)
    return {'form': form}

Ответы [ 2 ]

0 голосов
/ 02 июля 2011

Решено: Я забыл добавить кодировку к генерируемым HTML-страницам.Добавление <meta http-equiv="content-type" content="text/html; charset=utf-8"> решило проблему.

0 голосов
/ 31 мая 2011

Используйте магию! smart_unicode от Django должен вам очень помочь.Смесь между smart_unicode и smart_str относительно того, хотите ли вы кодировать или декодировать строку (для любого более позднего проекта;)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...