【发布时间】:2015-10-30 21:25:26
【问题描述】:
我正在尝试使用 Bottle.py 从网页中的用户那里获取输入信息。
除了我有拉丁字符(主要是口音)外,一切都很好。我曾尝试在代码的前两行使用 utf-8 和 latin-1 编码,但它不起作用。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import bottle
@bottle.post('/newpost')
def post_newpost():
subject = bottle.request.forms.get("subject")
body = bottle.request.forms.get("body")
tags = bottle.request.forms.get("tags")
页面中的html代码是:
<html>
<head>
<meta charset="utf-8" />
<title>New Posts</title>
</head>
<body>
<form action="/newpost" method="POST">
<h2>Post title</h2>
<input type="text" name="subject" size="120" value="{{subject}}" ><br>
<h2>Post<h2>
<textarea name="body" cols="120" rows="20">{{body}}</textarea><br>
<h2>Tags</h2>
<input type="text" name="tags" size="120" value="{{tags}}"><br>
<p>
<input type="submit" value="Submit">
</body>
</html>
我在 Bottle 页面中读到:
-
在 Python 3 中,所有字符串都是 unicode,但 HTTP 是基于字节的连线 协议。服务器必须先以某种方式解码字节字符串 它们被传递给应用程序。为了安全起见,WSGI 建议使用 ISO-8859-1(又名 latin1),一种可逆的单字节编解码器, 以后可以用不同的编码重新编码。瓶子做到了 用于 FormsDict.getunicode() 和属性访问,但不适用于 字典访问方法。这些返回由提供的未更改的值 服务器实现,这可能不是您想要的。
request.query['city']
'Göttingen' # 一个由服务器临时解码为 ISO-8859-1 的 utf8 字符串
request.query.city
'Göttingen' # 相同的字符串被瓶子正确地重新编码为utf8
如果您需要具有正确解码值的整个字典(例如,对于 WTForms),您可以调用 FormsDict.decode() 来获取重新编码的副本。
阅读后我尝试使用该功能但不知道如何使用。 现在 Bottle 表单返回字符串,所以我不能使用 encode('utf-8') 或 decode('utf-8')。
请帮帮我!
谢谢!
【问题讨论】:
-
我看到了这个问题,但也未能实施。尝试写 subject = bottle.request.forms.get.subject 并出错。
-
我发现我的错误,我不得不写 subject=bottle.request.forms.subject... 没有 get.. 谢谢!
-
我遇到了同样的问题。您在下面的回答效果很好。
标签: python forms encoding utf-8 bottle