2011-07-01 182 views
1

我在HTML頁面上使用通常的輸入類型標準格式:text,select,submit。使用Python(Pyramid框架)來處理這些表單很簡單,沒有問題。Python沒有正確處理來自HTML文本區域的文本輸入

但是,在這種特殊的形式中,我需要使用textarea來接受更長的多行輸入。當處理在Python用戶輸入,我用下面的代碼:

try: 
    some_input = request.params['form_element'].decode('utf-8') 
except: 
    some_input = None 

這適用於text輸入,但並不爲textarea輸入。 textarea當包括Unicode字符不處理的輸入,並拋出以下錯誤:

(<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'some text then a unicode character \u2013 and some more text', 14, 15, 'ordinal not in range(128)'), <traceback object at 0x10265ca70>) 

有沒有道理呢?它看起來像是假定textarea輸入被視爲ASCII而不是UTF-8,但我不知道如何改變這一點。

更多信息:表單提交頁面是一個HTML5頁面,字符集設置爲UTF-8。

編輯:Wladimir Palant認爲它已經被解碼和我檢查:

print isinstance(request.params['form_element'], str)返回False

print isinstance(request.params['form_element'], unicode)回報True

+0

我們應該知道您使用的是哪個框架嗎? –

+0

它是[金字塔](http://pylonsproject.org/)。我會在問題中澄清它。 – johneth

+5

聽起來像你的參數已經被解碼了,你正試圖在Unicode數據上使用'.decode(「utf-8」)'。想要檢查'isinstance(request.params ['form_element'],str)'和'isinstance(request.params ['form_element'],unicode)'? –

回答

2

有一個輸入端之間沒有區別[類型=文本]並提交數據時提供一個textarea。你所描述的問題應該發生在兩者中。

如果我錯了,請糾正我,但金字塔中使用的WebOb會爲您解碼。你已經得到了Unicode,所以不需要解碼或編碼任何東西。此外,您可以使用unicode作爲響應,並且會自動編碼。您很少必須在金字塔應用程序中使用編碼或解碼。