2

我有一个 Python 形式的 Google 应用引擎,将 POSTS 文本提交到服务器,然后文本使用 Quoted Printables 编码进行编码。我的 POST 代码是这样的:

<form action={{ upload_url }} method="post" enctype="multipart/form-data">
<div class="sigle-form"><textarea name="body" rows="5"></textarea></div>
<div class="sigle-form"><input name="file" type="file" /></div>
</form>

然后获取的结果 self.request.get('body')将使用编码 Quoted Printables 进行编码。我将它存储在文本 DB.textProperty() 中,然后使用 Django 将文本发送到 HTML 模板。当我使用 写出变量{{ body }}时,结果是使用 Quoted 可打印编码编写的,并且似乎没有办法在 Django HTML 模板中对此进行解码。是否有任何方法可以对以另一种方式发送的正文中的文本进行编码,而不是使用 Quoted Printables?如果没有,如何在 Django HTML 模板中解码这种编码?

提交文本“ÅØÆ”的结果被编码为“xdjG”,因此引用的 Prinables 的总和也以某种方式加在一起。当编码文本中存在多个特殊字符时,就会发生这种情况。一个普通的“ø”被编码为=F8。

编辑:我只在生产中遇到这个问题,这个线程似乎在谈论同样的问题。

如果 Stack Overflow 上的其他人正在使用 blob 和 åæøè 字符进行表单提交,请回复此线程以说明您是如何解决的!

4

3 回答 3

1

好的,在处理这个问题两天后,我终于解决了。它似乎是 Google App Engine 的一个错误,它使编码在生产中得到了改进。在生产中,文本有时使用 Quoted Printable 编码,有时使用 base64 编码。诡异的。这是我的解决方案:

postBody = self.request.get('body')    
postBody = postBody.encode('iso-8859-1')
DEBUG = os.environ['SERVER_SOFTWARE'].startswith('Dev')
if DEBUG:
    r.body = postBody
else:
    postBody += "=" * ((4 - len(postBody) % 4) % 4)
    b64 = base64.urlsafe_b64decode(postBody)

虽然生成的 b64 不能存储在数据存储中,因为它不是 ascii 编码的

'ascii' codec can't decode byte 0xe5 in position 5: ordinal not in range(128)
于 2012-10-25T07:46:06.293 回答
1

我通过使用 Python quopri 模块在将字符串传递给 HTML 模板之前对字符串进行解码,从而解决了类似的问题。

import quopri
body = quopri.decodestring(body)

这似乎与 multipart/form-data 编码类型有关。可引用的可打印编码应用于 textarea 输入,然后在我的情况下,通过 blobstore 上传链接提交。Blobstore 仍以编码形式将文本返回给我的上传处理程序。

于 2017-05-26T08:57:54.717 回答
0

不确定引用的印刷品是什么,但你试过安全吗?

{{ body|safe }}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#safe

于 2012-10-22T22:45:33.270 回答