2

Python形式のGoogleAppEngineを使用して、そのPOSTSテキストをサーバーに送信すると、テキストはエンコードされたQuotedPrintablesでエンコードされます。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')エンコードされたQuotedPrintablesでエンコードされます。これをテキストDB.textProperty()に保存し、後でDjangoを使用してテキストをHTMLテンプレートに送信します。を使用して変数を書き出す{{ body }}と、結果はQuoted Printableエンコーディングで書き込まれ、DjangoHTMLテンプレートでこれをデコードする方法がないようです。Quoted Printables以外の方法で送信された本文のテキストをエンコードする方法はありますか?そうでない場合、Django HTMLテンプレートでこのエンコーディングをデコードする方法は?

テキスト「ÅØÆ」を送信した結果は「xdjG」にエンコードされるため、引用されたPrinablesの合計も何らかの形で追加されます。これは、エンコードされたテキストに複数の特殊文字が含まれている場合に発生します。通常の「ø」は=F8にエンコードされます。

編集:私は本番環境でのみこの問題を抱えています、そしてこのスレッドは同じ問題について話しているようです。

Stack Overflowの他の誰かが、blobとåæøè文字を使用してフォーム送信を行っている場合は、このスレッドにどのように解決したかを返信してください。

4

3 に答える 3

1

わかりました。この問題に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)
于 2012-10-25T07:46:06.293 に答える
1

Python quopriモジュールを使用して文字列をデコードしてから、HTMLテンプレートに渡すことで、同様の問題を解決しました。

import quopri
body = quopri.decodestring(body)

これは、multipart /form-dataenctypeと関係があるようです。引用可能な印刷可能なエンコーディングがtextarea入力に適用され、私の場合は、blobstoreアップロードリンクを介して送信されます。blobstoreは、テキストをまだエンコードされた形式でアップロードハンドラーに返します。

于 2017-05-26T08:57:54.717 に答える
0

Quoted Printablesが何であるかはわかりませんが、安全に試しましたか?

{{ body|safe }}

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

于 2012-10-22T22:45:33.270 に答える