OBS 对象链接里的加号,别当成表单空格
【摘要】 用 Python 对照 OBS 对象键中加号、空格与百分号的路径编码,避免表单解码和重复转码混用。
我今天整理 OBS 对象链接时,拿 logs/a+b 01.txt 在本地 Python 3.10.12 做了个编码对照。文件名同时带加号和空格,看着有点别扭,不过正好能把路径处理的问题放大。
from urllib.parse import quote, unquote, unquote_plus
key = "logs/a+b 01.txt"
path = quote(key, safe="/")
print(path) # logs/a%2Bb%2001.txt
assert unquote(path) == key
print(unquote_plus(key)) # logs/a b 01.txt
unquote_plus 把原始路径里的加号变成了空格;它适合表单编码那套规则,不该直接拿来处理对象键。路径中的 + 本身不是空格,这一点容易顺手写错。
我还试了把 path 再 quote 一次,结果是 logs/a%252Bb%252001.txt,百分号也被编码了。排查链接时,我会把原始对象键和编码后的路径分开保存,不做反复转码。实际调用 OBS 仍交给 SDK 处理;尤其预签名链接,生成后别再手动编码整条 URL。
这只是本地字符串验证,没有操作真实桶,也没有验证 OBS 的签名算法。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)