You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blob URL含短破折号(–)时copy_blob函数执行失败

解决Azure Blob存储复制含特殊字符文件的latin-1编码错误

这个问题我太熟悉了!你遇到的latin-1编码失败,根源是文件名里的**短破折号(–)**属于Unicode字符,直接把它硬编码在URL里传给copy_blob时,Azure SDK默认用latin-1去解析这个URL,自然识别不了这个特殊字符。

给你两个靠谱的解决办法:

方法一:手动URL编码Blob路径

用Python的urllib.parse.quote对Blob的路径部分进行URL编码,把特殊字符转成URL安全的格式:

from urllib.parse import quote

# 拆分源Blob的容器和路径
source_container = "daps3blob"
source_blob_name = "kuldeep/Depot – Week.xlsx"

# 编码Blob名称(保留路径分隔符/,所以safe参数设为'/')
encoded_blob_name = quote(source_blob_name, safe='/')
# 拼接成正确编码的源URL
source_url = f"https://dapblobstorage.blob.core.windows.net/{source_container}/{encoded_blob_name}"

# 调用copy_blob
block_blob_service.copy_blob(
    archive_container, 
    "pleasegodpleaseplease.xlsx", 
    source_url
)

方法二:用SDK自带方法生成编码后的URL

更稳妥的方式是用Azure SDK提供的make_blob_url方法,它会自动处理Blob名称中的特殊字符编码,不用自己手动折腾:

# 直接生成正确编码的源Blob URL
source_url = block_blob_service.make_blob_url(
    container_name="daps3blob",
    blob_name="kuldeep/Depot – Week.xlsx",
    protocol="https"
)

# 执行复制
block_blob_service.copy_blob(
    archive_container, 
    "pleasegodpleaseplease.xlsx", 
    source_url
)

小提醒

以后处理包含非ASCII字符(比如中文、特殊符号)的Blob名称时,尽量避免手动拼接URL,用SDK提供的方法生成URL是最不容易出错的方式,能自动帮你处理各种编码细节。

内容的提问来源于stack exchange,提问作者Kuldeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:41:47