Swift中无法解压API返回的Brotli压缩数据求助
问题分析与解决方案
核心错误原因
你处理API返回数据的步骤错了:API给的"Cw2AeyJuYW1lIjoiaU9TRGV2IiwgImFnZSI6MzB9Aw=="是Base64编码后的Brotli压缩数据,但你直接用serverResponse.data(using: .utf8)转成Data,这得到的不是真正的压缩二进制数据,解压肯定失败。
修正后的代码
先把Base64字符串解码成原始压缩Data,再执行解压:
let serverResponse = "Cw2AeyJuYW1lIjoiaU9TRGV2IiwgImFnZSI6MzB9Aw==" // 第一步:Base64解码拿到真实的压缩Data guard let inputData = Data(base64Encoded: serverResponse) else { fatalError("无效的Base64字符串") } do { let decompressedData = try inputData.decompressed() print("Decompressed: \(String(describing: decompressedData))") let decompressedString = String(decoding: decompressedData, as: UTF8.self) print("Decompressed String -> \(decompressedString)") } catch { fatalError("解压失败:\(error)") }
为什么本地测试正常?
本地测试时,你是直接把字符串转成Data后压缩,得到的是原始压缩二进制数据,解压时直接用这个Data操作,流程没问题。但API返回的二进制数据会先经过Base64编码(避免HTTP传输二进制时出现乱码或丢失),所以必须先解码才能拿到正确的压缩Data。
内容的提问来源于stack exchange,提问作者iOSAppDev
相关产品推荐
相关产品推荐

