fix: 修复 POP 签名 percentEncode 使用 Unicode 字母集导致非 ASCII 字符未编码的问题

This commit is contained in:
2026-06-30 11:38:47 +06:00
parent a6206b6881
commit 7593e054b7
@@ -26,6 +26,8 @@ struct VODSignature {
let stringToSign = "\(method)&%2F&\(percentEncode(canonicalQuery))" let stringToSign = "\(method)&%2F&\(percentEncode(canonicalQuery))"
print("[VODSignature] stringToSign: \(stringToSign)")
guard let keyData = "\(accessKeySecret)&".data(using: .utf8) else { guard let keyData = "\(accessKeySecret)&".data(using: .utf8) else {
throw VODSignatureError.invalidKey throw VODSignatureError.invalidKey
} }
@@ -40,7 +42,15 @@ struct VODSignature {
} }
private static func percentEncode(_ value: String) -> String { private static func percentEncode(_ value: String) -> String {
let allowed = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~") let allowed = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~"
return value.addingPercentEncoding(withAllowedCharacters: allowed) ?? value var result = ""
for char in value.utf8 {
if allowed.utf8.contains(char) {
result.append(Character(UnicodeScalar(char)))
} else {
result.append(String(format: "%%%02X", char))
}
}
return result
} }
} }