2011-07-01 148 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作为响应,并且会自动编码。您很少必须在金字塔应用程序中使用编码或解码。