UnicodeEncodeError: 'ascii'编解码器无法在位置1处编码字符u'\xe9',因为其序数不在128的范围内。

8

我知道这方面已经有了一些标题,但是我的问题与之不同。以下是我的问题:我使用上下文处理器来显示用户名。它可以正常工作,但是昨天我的Sentry检测到一个错误。

UnicodeEncodeError: 'ascii'编解码器无法在位置1处编码字符u'\xe9':序数不在128的范围内

以下是我的代码:

def display_name(request):
    try:
        name = "{0} {1}".format(request.user.first_name, request.user.last_name)
        name = name.strip()
        if not name:
            name = request.user.username
    except AttributeError:
        name = None

    return {'display_name': name,}

这是什么原因?还是用户输入了他们的名字字符?
1个回答

19

这基本上是一个用户输入问题。

文本编码是一个复杂的问题,很难理解,但简单来说,用户输入了一个Unicode字符,无法轻易地映射到ASCII字符。

您可以通过更改以下内容来解决此问题:

name = "{0} {1}".format(request.user.first_name, request.user.last_name)

到这个:
name = u"{0} {1}".format(request.user.first_name, request.user.last_name)

这告诉Python将字符串视为Unicode字符串(具有与ASCII字符串相同的所有常规功能)。


在我给你打分之前,让我翻译一下有关编程的内容。在模板中使用{{user.get_full_name}}是否可以,而不会检测到ASCII错误? - catherine
1
没问题。Django内置的东西通常会返回Unicode字符串。 - Jack Shedd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接