Appengine将unicode字符转换为空字符urllib.unqu

2024-10-04 11:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在发送编码的post数据到appengine项目。但是appengine在响应中显示空白字符。在

我正在发送此表单数据: mdata=I%FD%FD%FE%DE%DE%E7%E7%C7%D6%F6%F6%D6%D6%0A%0A

我的appengine响应代码是:

request_data = self.request.get('mdata')
mailhtmldata = urllib.unquote_plus(request_data)

repr(request_data)和repr(mailhtmldata)是u'I\n\n',但unicode字符如“İschöü”仍然是空白的。我确信我的发送者正在发送mdata=I%FD%FD%FE%DE%DE%E7%E7%C7%D6%F6%F6%D6%D6%0A%0A。我测试过了。在哪里其他字符在appengine中吗?在

谢谢你的帮助。在

对不起,我的英语不好

更新:

这是我的发送函数

^{pr2}$

这是appengine代码:

class mTransfer(webapp.RequestHandler):
    def post(self):
        mailhtmldata = urllib.unquote_plus(self.request.get('mdata'))
        x2adresx = urllib.unquote(self.request.get('mailam'))
        x2gonderenx = urllib.unquote(self.request.get('mfromname'))
        x2gondid = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(12))
        anagonderen = "Deneme <info@koorsender.appspotmail.com>"
        mailsubjdata = urllib.unquote(self.request.get('mkonu'))
        message = mail.EmailMessage(sender=anagonderen, subject=mailsubjdata)
        message.to = x2adresx
        message.body = mailhtmldata
        message.html = mailhtmldata
        message.send()
        self.response.out.write("OK")

我试过了,但还是找不到解决办法

更新2:如果您使用的是unicode字符集,则将其解码为您的字符集,然后可以将其编码为utf-8。在


Tags: 数据selfmessage编码datagetrequesturllib
2条回答

尝试在urlencoding之前将其转换为"utf-8"

mdata_ue = "I%FD%FD%FE%DE%DE%E7%E7%C7%D6%F6%F6%D6%D6%0A%0A"
mdata = urllib.unquote_plus(mdata_ue).decode('iso-8859-9')
print urllib.quote_plus(mdata.encode('utf-8'))

输出:

^{pr2}$

您发送的内容似乎是url对某些字符进行编码的结果,这些字符用cp1254(Windows土耳其语)编码(或非常类似的ISO-8859-9编码)表示。你告诉“appengine”你用的是什么编码吗?在

我们需要更多关于“仍然unicode字符,如”İş嫒“是空白的”的更多信息。当你看着他们的时候,怎么会感到茫然?而不是

htmldata = urllib.unquote_plus(self.request.get('mdata'))

这样做:

request_data = self.request.get('mdata')
htmldata = urllib.unquote_plus(request_data)

并编辑您的问题以显示repr(request_data)和{}的结果

更新你说self.request.get('mdata')返回{}。。。数据中的非ASCII字符不会返回为空白;它们将被删除。在

有人的代码正在剥离非ASCII字符。类似于your_input.decode(some_encoding, 'ignore'),其中some_encoding设置为ascii或{}。在

向我们展示您“告诉appengine我使用的编码(iso-8859-9)”的代码。在

更新2回应发布的发送代码和这条评论“我正在添加# -*- coding: iso-8859-9 -*-到顶部”。在

将“编码”放在源文件的顶部就是告诉Python编译器源文件其余部分的编码。它与数据的编码无关。你可以删除编码,而不是写'mdata' : 'IıışŞşÖÖççç',你可以写'mdata' : 'I\xFD\xFD etc etc',得到相同的字节串发送到服务器,效果相同。您已经没有告诉appengine您使用的编码。在

而不是

"Content-type": "application/x-www-form-urlencoded"

我建议你试试这个:

"Content-Type": "application/x-www-form-urlencoded; charset:ISO-8859-9;"

相关问题 更多 >