Python 当存在“时,复制”blob函数失败;“破折号”;blob url中的(–;)

Python 当存在“时,复制”blob函数失败;“破折号”;blob url中的(–;),python,azure,azure-storage-blobs,python-3.7,azure-blob-storage,Python,Azure,Azure Storage Blobs,Python 3.7,Azure Blob Storage,我需要将一个带有破折号“Depot–Week.xlsx”的文件复制到其他Blob存储位置(容器) block\u blob\u服务是BlockBlobService类(azure.storage.blob.BlockBlobService)的对象 下面的代码片段: block_blob_service.copy_blob(archive_container, "pleasegodpleaseplease.xlsx",

我需要将一个带有破折号“Depot–Week.xlsx”的文件复制到其他Blob存储位置(容器)

block\u blob\u服务
BlockBlobService
类(
azure.storage.blob.BlockBlobService
)的对象

下面的代码片段:

block_blob_service.copy_blob(archive_container, "pleasegodpleaseplease.xlsx",                                                         "https://dapblobstorage.blob.core.windows.net/daps3blob/kuldeep/Depot – Week.xlsx")
我得到以下错误-

客户端请求ID=9e183a7e-a24d-11e9-9423-f48e389d3b95重试策略不允许重试:,HTTP状态代码=未知,异常=拉丁语-1。
未能存档文件:latin-1


作为评论和我的补充内容的总结

有一个官方文档介绍了容器或blob名称中不能使用的字符。为了解决这个问题,一个常见的解决方案是使用UTF-8/url编码器对名称或url进行编码

在Python中,代码如下所示,为了解决一些特殊字符的问题,例如
/
不需要使用参数
safe
进行函数编码

注意:破折号(-)字符可用于容器和blob的名称

每个破折号(-)字符的前面和后面必须紧跟 字母或数字;容器中不允许使用连续破折号 名字


但是空格字符不能用在容器名称中,必须用blob名称及其url编码。

您尝试过使用文件的url编码名称吗<代码>https://dapblobstorage.blob.core.windows.net/daps3blob/kuldeep/Depot%20%E2%80%93%20Week.xlsx@Chillie它在工作!!我将寻找一种编码url的方法now@Chillieurllib.parse.quote将“:”转换为“%3A”。你知道解决这个问题的方法吗:/@Chillie…请把你的评论作为答案。
# In Python 3.7
from urllib import parse
url_str = 'https://dapblobstorage.blob.core.windows.net/daps3blob/kuldeep/Depot - Week.xlsx'
url_str_quoted = parse.quote(url_str, safe=':/')
print(url_str_quoted)
# The result is  https://dapblobstorage.blob.core.windows.net/daps3blob/kuldeep/Depot%20-%20Week.xlsx

# for En Dash
print(parse.quote('Depot – Week.xlsx'))
# The result is Depot%20%E2%80%93%20Week.xlsx