在 2025 年 12 月 1 日及之后启用日志存储功能的存储桶,日志文件中的对象名称默认会进行 URL 编码。如果您的业务逻辑依赖原始的对象名称,您可能需要解码对象名称,避免因编码字符导致名称解析错误。本文通过 Python、Java 和 Go 的代码示例,介绍如何对对象名称进行解码。
from urllib.parse import unquote encoded_object = "data%2Ffile%2F%E6%97%A5%E5%BF%97%E5%AD%98%E5%82%A8.txt" decoded_object = unquote(encoded_object) # decoded_object 将是 "data/file/日志存储.txt"
import java.net.URLDecoder; import java.nio.charset.StandardCharsets; public class LocalDemoTest { public static void main(String[] args) { String encodedObject = "data%2Ffile%2F%E6%97%A5%E5%BF%97%E5%AD%98%E5%82%A8.txt"; // URL 编码后的对象名中,不会对 '+' 进行编码,而 URLDecoder.decode 方法会把 '+' 解码为空格,因此为避免解码错误,需先把对象名中的 '+' 替换为 '%2B' encodedObject = encodedObject.replace("+", "%2B"); // decodedObject 将是 "data/file/日志存储.txt" try { String decodedObject = URLDecoder.decode(encodedObject, StandardCharsets.UTF_8.toString()); System.out.println(decodedObject); } catch (Exception e) { e.printStackTrace(); } } }
import "net/url" func main() { encodedObject := "data%2Ffile%2F%E6%97%A5%E5%BF%97%E5%AD%98%E5%82%A8.txt" // decodedObject 将是 "data/file/日志存储.txt" decodedObject, err := url.PathUnescape(encodedObject) if err != nil { fmt.Println(err) } fmt.Println(decodedObject) }