Django用\ ufffd替换非ascii字符

时间:2011-04-21 15:07:39

标签: django unicode

在我的项目中,当我向表单提交带有非ascii字符的数据时,我将所有非ascii数据替换为unicode替换字符\ ufffd。在从表单接收数据的视图中,我在request.POST中有这个格式错误的字符串。似乎我错过了一些明显的东西。

我的环境:

  • Python 2.6
  • Django 1.3 alpha 1
  • MySQL 5.1,数据库使用UTF-8字符集

使用运行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 :(得分:0)

使用魔法! smart_unicode from Django应该会帮助你很多。在smart_unicode和smart_str之间进行混合,了解是否要对字符串进行编码或解码(对于任何后续项目;)。

答案 1 :(得分:0)

已解决:我忘了将编码添加到我正在生成的HTML页面中。添加<meta http-equiv="content-type" content="text/html; charset=utf-8">解决了这个问题。