【问题标题】:How to properly decode Quoted Printable encoding in Django HTML Template如何正确解码 Django HTML 模板中的引用可打印编码
【发布时间】:2012-10-12 17:55:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python google-app-engine quoted-printable


    【解决方案1】:

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

    import quopri
    body = quopri.decodestring(body)
    

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

    【讨论】:

    • 正是我从Content-Transfer-Encoding: quoted-printable 格式的电子邮件正文中获取 URL 所需要的。 quopri 甚至在标准库中——我以为我现在已经看到了它们。
    【解决方案2】:

    好的,经过两天的处理这个问题,我终于解决了。它似乎是 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)
    

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2012-05-14
      • 2020-03-16
      • 2019-11-25
      • 2020-02-17
      • 2013-12-14
      • 2017-10-25
      • 2015-01-18
      • 2012-02-06
      • 2018-03-29
      相关资源
      最近更新 更多