2013-02-26 22 views
8

これについては既存のタイトルがありますが、質問は私とは異なります。だから私の問題です。コンテキスト・プロセッサを使用してユーザー名を表示します。それは働いていますが、私の監視隊は昨日エラーを検出します。UnicodeEncodeError: 'ascii'コーデックは、位置1の文字u ' xe9'をエンコードできません:序数が範囲内にありません(128)

UnicodeEncodeErrorを: 'ASCII' コーデックuが文字をエンコードすることはできません1位 'が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,} 

原因は何これの?またはユーザーの名前の入力文字ですか?

答えて

18

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

テキストエンコーディングは全体的なもので、入りにくいですが、ナットシェルでは、ユーザーが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) 

これは、ASCIIとしてすべての通常の機能を持つUnicode文字列として文字列を(治療にはPythonを伝えます文字列)。

+0

私はあなたの答えをマークします。テンプレート内の{{user.get_full_name}}を使用しても構いませんが、ASCIIエラーは検出されませんか? – catherine

+1

ええ、それはいいです。 Djangoの組み込みのものは常に(通常)Unicode文字列を返します。 –

+0

情報ありがとう – catherine

関連する問題