2

我在 HTML 页面上有一个标准表单,具有通常的输入类型:text, select, submit. 使用 Python(Pyramid框架)处理这些表单非常简单且没有问题。

但是,在这种特殊形式中,我需要使用 atextarea来接受更长的多行输入。在 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。

编辑: 弗拉基米尔帕兰特建议它已经被解码,我检查了这个:

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

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

4

1 回答 1

2

提交数据时 input[type=text] 和 textarea 没有区别。您描述的问题应该发生在两者中。

如果我错了,请纠正我,但是 Pyramid 中使用的 WebOb 会为您进行解码。您已经获得 Unicode,因此无需解码或编码任何内容。此外,您可以使用 unicode 作为响应,它会自动编码。您很少需要在 Pyramid 应用程序中使用编码或解码。

于 2011-07-01T15:04:11.783 回答