【问题标题】:Django replaces non-ascii characters with \ufffdDjango 用 \ufffd 替换非 ascii 字符
【发布时间】:2011-08-10 09:35:42
【问题描述】:

在我的项目中,当我向表单提交一些带有非 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}

【问题讨论】:

  • 已经用代码更新了我的问题,谢谢。

标签: django unicode


【解决方案1】:

使用魔法! smart_unicode from Django 应该对你有很大帮助。混合使用 smart_unicode 和 smart_str 关于是否要对字符串进行编码或解码(对于任何以后的项目;))。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这个还有什么要详细说明的吗?我遇到了同样的错误,但我 确实 在 HTML 中设置了字符集:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多