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
相关产品推荐
相关产品推荐

