使用iOS内置压缩库解压zlib数据时持续报NSCocoaErrorDomain Code=5377
问题排查与解决
错误码含义
Error Domain=NSCocoaErrorDomain Code=5377 对应NSDataCompressionErrorInvalidFormat,说明系统压缩库判定输入数据不符合指定的.zlib格式标准。
核心原因
Apple的NSData.decompressed(using: .zlib)接口要求输入数据必须包含完整的zlib头部(2字节标识)和ADLER32校验尾,但你用其他工具生成的文件可能是原始deflate格式(仅包含压缩数据本身,无zlib头尾)。虽然Python zlib、zlib-flate等工具能自动兼容这类格式,但Apple系统库对格式的校验更严格。
解决方法
将解压算法切换为.deflate,该选项专门处理无zlib头尾的原始deflate数据:
import Compression do { let data = try Data(contentsOf: URL(fileURLWithPath: filePath)) print("read data of size \(data.count) bytes") // 修正原代码中的变量名笔误 let decompressedData = try (data as NSData).decompressed(using: .deflate) as Data } catch { print("Failed to decompress data: \(error)") }
额外检查
- 确认压缩文件的生成参数:比如Python中使用
zlib.compressobj(level, wbits=-15)会生成raw deflate格式,这类文件必须用.deflate解压。 - 原代码存在变量名错误:
fileData.count应改为data.count,虽不影响解压,但会导致文件大小打印错误。
内容的提问来源于stack exchange,提问作者rdk
相关产品推荐
相关产品推荐

