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

これは基本的にユーザー入力の問題です。

テキストエンコーディングは完全な「もの」であり、理解するのは困難ですが、簡単に言うと、ユーザーは ASCII 文字に簡単にマップできない Unicode 文字を入力しました。

これを変更することでこれを修正できます:

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)

これは、文字列を Unicode 文字列として扱うように Python に指示します (これには、すべての通常の機能が ASCII 文字列として含まれています)。

于 2013-02-26T08:30:58.037 に答える