Python无法正确处理来自HTML文本区域的文本输入
我在一个HTML页面上有一个标准的表单,里面有常见的输入类型:text
(文本框)、select
(下拉框)和submit
(提交按钮)。我用Python(Pyramid框架)来处理这些表单,一切都很顺利,没有问题。
不过在这个特定的表单中,我需要使用一个textarea
(多行文本框)来接受更长的、多行的输入。在处理用户输入时,我用的代码是:
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
1 个回答
2
当你提交数据时,input[type=text]和textarea之间没有区别。你提到的问题在这两者中都会发生。
如果我说错了请纠正我,但在Pyramid框架中使用的WebOb会为你处理解码的事情。你得到的已经是Unicode格式了,所以不需要再去解码或编码什么。此外,你可以在响应中使用Unicode,它会自动进行编码。在Pyramid应用中,你很少需要手动使用编码或解码。