【发布时间】:2010-09-02 06:11:28
【问题描述】:
我有一个简单的表单,可以将图像提交到 blobstore 和图像的标题。
这适用于我的本地开发服务器,但是当我部署我的代码时,标题中的非 ascii 字母会因某种 ascii 和 hex 的混合而变得乱码。例如 Ísland 变成 =CDsland。请注意,我使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 作为标题中的第一个值。 utf-8 也适用于我的所有其他形式。只是变得乱码的多部分形式。无论如何,这是我的表格:
<form action="{{ uploadurl }}" enctype="multipart/form-data" method="post">
<div><label>Title</label><input type="text" name="title" class="string" /></div>
<div><label>Picture</label><input type="file" name="img"/></div>
<div style="margin-top:10px;"><input type="submit" value="Add picture" /></div>
<input type="hidden" value="{{ album.key }}" name="alid"/>
</form>
这是处理表单的类:
# handler for posting photos
class PostPhoto(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('img')
photourl = images.get_serving_url(str(upload_files[0].key()))
photo = Photo()
#because of multipart/form-data
photo.title = self.request.get("title")
photo.photourl = photourl
photo.photoalbum = PhotoAlbum.get(self.request.get('alid'))
photo.put()
有人知道我该如何解决这个问题吗?我必须做一些服务器端编码/解码吗?我已经尝试在谷歌上搜索但没有结果(python newb),所以这是我在更改设计并拆分表单之前的最后手段。
【问题讨论】:
-
你用什么来确定服务器上的标题是什么?如果您不使用 blobstore 直接发布到处理程序,这是否有效?
-
无论何时通过 HTTP 提供您的网页,元内容类型标记是否出现在 HTML 头部的顶部都是完全无关的。有点体面的网络浏览器将使用 HTTP 响应标头中的那个。另请参阅 w3 规范 w3.org/TR/html4/charset.html#h-5.2.2
-
目前 appegine SDK 1.7.2 尚未修复,但生产行为略有变化:“Ísland”变为“zXNsYW5k”。 unicode(base64.b64decode('zXNsYW5k'), 'iso_8859-2')
标签: python google-app-engine character-encoding