【问题标题】:django encode UnicodeEncodeError at /django 在 / 处编码 UnicodeEncodeError
【发布时间】:2017-08-04 09:23:54
【问题描述】:

我在 django 项目中遇到问题。

UnicodeEncodeError at /contact/1/view 'ascii' codec can't decode byte 0xd0 in position 28: ordinal not in range(128)

在回溯中: single_contact 中的views.py

'vcard_str': unicode(VCard(contact)),

和所有视图

def single_contact(request, pk):
contact = Contact.objects.get(pk = pk)
if contact.group.user != request.user.profile:
    raise Http404
if request.method=="GET":
    emails = Email.objects.filter(contact = contact)
    hash = ''
    if emails:
        email = emails[0]
        hash = get_hash(email.email)
    addresses = Address.objects.filter(contact = contact)
    if addresses:
        address = addresses[0]
    phones = PhoneNumber.objects.filter(contact=contact)
    return render(request, 'dashboard/addressbook/single_contact.html',
            RequestContext(request, {
                'contact':contact, 'emails':emails, 'hash':hash,
                'addresses':addresses, 'phones':phones,
                'vcard_str': unicode(VCard(contact)),
            }))
elif request.method=="POST":
    contact.delete()
    return HttpResponseRedirect(reverse('addressbook_index'))
else:
    raise Http404

我做错了什么?我怎样才能解决这个问题 ?

【问题讨论】:

  • 能否请您提供 VCard 中 contact 值的原始值?

标签: python django


【解决方案1】:

您可以尝试使用 utf-8 编码:

'vcard_str':  (VCard(contact)).encode("utf-8")

【讨论】:

    【解决方案2】:

    在 models.py 中更新 VCard 的 str 方法来处理这个异常。

        def __str__(self):
            return self.name.encode('utf-8')
    

    【讨论】:

    • 如果我更新这个模型,我在 /contact/2/view 'ascii' codec can't decode byte 0xd0 in position 170: ordinal not in range(128) 处收到错误 UnicodeDecodeError
    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2016-11-28
    • 1970-01-01
    • 2013-02-06
    • 2015-10-21
    • 2010-12-11
    • 2015-01-21
    相关资源
    最近更新 更多