2013-02-26 93 views
8

我知道現在有這個標題,但問題與我的不同。所以這是我的問題。我使用上下文處理器來顯示用戶名。它的工作,但我的哨兵昨天發現一個錯誤。UnicodeEncodeError:'ascii'編解碼器無法編碼字符u' xe9'在位置1:序號不在範圍內(128)

UnicodeEncodeError: 'ASCII' 編解碼器不能編碼字符U '\ xe9' 在位置1:在範圍序數不(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

這基本上是一個用戶輸入問題。

文本編碼是一個整體「東西」,很難進入,但在堅果殼中,用戶輸入的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串)。

+0

之前,我標記你的答案。可以在模板中使用{{user.get_full_name}}並且它不會檢測到ascii錯誤嗎? – catherine 2013-02-26 08:40:18

+1

是的,沒關係。 Django的內置東西總是(通常)返回unicode字符串。 – 2013-02-26 08:57:28

+0

好的謝謝你的信息 – catherine 2013-02-26 09:04:03

相關問題