...しかし、同じ方法で2回エスケープするわけではありません。
gpgからWebサイトにASCII出力をアップロードしようとしています。したがって、これまでのところ、私が取得したビットは、テーブルにクエリを実行し、取得したデータを表示し、HTTPPOSTリクエスト用にエンコードした後に表示します。
cnx = connect()
sql = ("SELECT Data FROM SomeTable")
cursor = cnx.cursor()
cursor.execute(sql)
for (data) in cursor:
print "encoding : %s" % data
postdata = urllib.urlencode( { "payload" : data } )
print "encoded as %s" % postdata
...しかし、私が得るものは次のとおりです。
encoding : -----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.12 (GNU/Linux)
.... etc...
encoded as payload=%28u%27-----BEGIN+PGP+MESSAGE-----%5CnVersion%3A+GnuPG+v1.4.12+... etc ...
注意すべき部分は、私が期待するように、改行が%0Aに変換されていないことです。代わりに、それらはどういうわけか「\ n」にエスケープされ、次に円記号は%5Cにエスケープされるため、改行は「%5Cn」になります。さらに奇妙なことに、データには%28u%27が付加され、「(u'」になります。
奇妙なことに、私が基本的なテストを行う場合:
data = "1\n2"
print data
print urllib.urlencode( { "payload" : data } )
私は期待するものを手に入れました、改行は%0Aに変わります...
1
2
payload=1%0A2
したがって、私の予感は、mysqlクエリから返されるデータ要素が私の文字列 "1 \ n2"(おそらく1要素のdict ... dunno)と同じ種類の文字列ではないということですが、私は持っていませんそれを検査する方法を知るためのPythonカンフー。
誰もがここで何が起こっているのか、そしてどうすればそれを修正できるのか知っていますか?そうでない場合は、すべてを適切にエスケープしてHTTP経由でこれをPOSTする方法についての提案はありますか?