UnicodeEncodeError:'ascii'编解码器无法对位置1中的字符u'\ xe9'进行编码:序数不在范围内(128)

时间:2013-02-26 08:05:18

标签: django

我知道有关于此的现有标题,但问题与我的不同。所以这是我的问题。我使用上下文处理器来显示用户名。它正在工作但我的哨兵昨天发现了一个错误。

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 个答案:

答案 0 :(得分:18)

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

文本编码是一个完整的“事物”,很难进入,但在坚果壳中,用户输入的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字符串)。