8

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

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,}

这是什么原因?或者用户输入他们名字的字符?

4

1 回答 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 字符串)。

于 2013-02-26T08:30:58.037 回答