通过boto和unicode密钥名获取s3密钥
我正在使用一个post请求,该请求引用可能包含非英语字符的s3,例如:通过boto和unicode密钥名获取s3密钥,unicode,amazon-s3,boto,Unicode,Amazon S3,Boto,我正在使用一个post请求,该请求引用可能包含非英语字符的s3,例如: {'key': 'náme'} 当使用json.loads加载帖子正文时,它将变为: {u'key': u'n\xe1me'} 现在不幸的是,给定这个unicode键,boto没有抓取对象(我已经确认对象náme确实存在于所需的bucket中) 是否有办法通过boto获取所需对象,或者我是否需要查看其他选项,例如强制实施更为boto友好的命名策略 更新: 因此,从我可以收集到的json.loads()编码是拉丁文1,只需
{'key': 'náme'}
当使用json.loads加载帖子正文时,它将变为:
{u'key': u'n\xe1me'}
现在不幸的是,给定这个unicode键,boto没有抓取对象(我已经确认对象náme
确实存在于所需的bucket中)
是否有办法通过boto获取所需对象,或者我是否需要查看其他选项,例如强制实施更为boto友好的命名策略
更新:
因此,从我可以收集到的json.loads()编码是拉丁文1,只需在终端中调用
náme
,就会返回utf-8编码版本(n\xc3\xa1me
),但我不熟悉boto在列出键时使用的编码(u'na\u0301me'
)我希望通过识别这一点,可以很容易地将拉丁语编码转换为未知编码,这样当从发布的数据中获得拉丁语版本时,我就可以开始访问密钥。URL中如何编码?我想知道S3是否需要百分比编码的utf8%C3%A1
。在检查控制台生成的URL时,使用控制台下载对象可能是一个有用的练习。如上所述,S3将使用utf-8字符映射以百分比编码显示unicode键名,这是%C3%A1,很有趣,它不包含%C%A1
,但显示为na%CC%81me
。但是,boto将密钥列为u'na\u0301me.doc'
(来自s3Client.list\u objects
)此编码方法是调用组合重音。老实说,我宁愿要求用户将对象密钥保存为sha256哈希,并将原始文件名放入S3对象元数据中。处理各种用户编码风格几乎是不可能的。或者您可以在域名上强制使用RFC方法,所有名称仅以ASCII显示,所有unicode将使用punycode转换器进行转换。当您看到xn-prefix时,您必须启动转换器。