sqs中的消息包含十六进制值“=”而不是ASCII

问题描述 投票:-1回答:2

我已经在我的存储桶上配置了事件,只要存储桶中有新对象,它就会触发消息为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', '=')
python amazon-s3 amazon-sqs
2个回答
1
投票

这是预期和documented

s3键提供有关事件中涉及的存储桶和对象的信息。请注意,对象keyname值是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 xx:

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

0
投票

它也可以这种方式完成

import urllib.parse

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

fileLocation = urllib.parse.unquote(fileLocation)

© www.soinside.com 2019 - 2024. All rights reserved.