我在HTML页面上有一个标准表单,其中包含常用的输入类型:text
,select
,submit
。使用Python(Pyramid框架)处理这些表单非常简单,没有问题。
但是,在这种特殊形式中,我需要使用textarea
来接受更长的多行输入。在Python中处理用户输入时,我使用了以下代码:
try:
some_input = request.params['form_element'].decode('utf-8')
except:
some_input = None
这适用于text
输入,但不适用于textarea
输入。当包含unicode字符时,不处理textarea
输入,并抛出以下错误:
(<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 :(得分:2)
提交数据时输入[type = text]和textarea之间没有区别。您描述的问题应该发生在两者中。
如果我错了,请纠正我,但Pyramid中使用的WebOb会为您解码。您已经获得了Unicode,因此无需对任何内容进行解码或编码。此外,您可以使用unicode作为响应,它将自动编码。您很少需要在Pyramid应用程序中使用编码或解码。