sqs中的消息包含十六进制值" =" ASCII的instaead

时间:2018-01-02 09:58:44

标签: python amazon-s3 amazon-sqs

我已在我的存储桶上配置了事件,只要存储桶中有新对象,它就会触发消息为SQS。我的桶中的钥匙看起来像

'/model/invalid/SourceSystem/20160101/Monthly/SourceSystem/year=2018/month=01/day=02/test.csv'

在阅读来自sqs的消息时,我得到了响应

'/model/invalid/SourceSystem/20160101/Monthly/SourceSystem/year%3D2018/month%3D01/day%3D02/test.csv

截至目前,我正在使用python代码将%3D替换为=,但它似乎不是一个正确的解决方案

fileLocation = fileLocation.replace('%3D', '=')

2 个答案:

答案 0 :(得分:1)

这是预期的documented

  

s3键提供有关事件中涉及的存储桶和对象的信息。 请注意,对象键名值是URL编码的 。例如,"red flower.jpg"变为"red+flower.jpg"

对于解码URL编码密钥,您可以使用urllib.unquote_plus

  

%xx转义符替换为单字符等效值。 _plus后缀表示它还会将+解码为 - s̳p̳a̳c̳e̳字符)

Python 2.x

from urllib import unquote_plus as urldecode
# ...
fileLocation = urldecode(fileLocation)

Python 3.x

from urllib.parse import unquote_plus as urldecode
# ...
fileLocation = urldecode(fileLocation)

答案 1 :(得分:0)

也可以这种方式完成

import urllib.parse

fileLocation ='/ model / invalid/SourceSystem/20160101/Monthly/SourceSystem/year%3D2018/month%3D01/day%3D02/test.csv'

fileLocation = urllib.parse.unquote(fileLocation)