You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何unzip忽略Zip64 EOCD记录?ASi UNIX扩展字段问题排查

问题排查与解决建议

一、Zip64 EOCD/EOCL 不被识别、多卷误判问题

1. 严格遵循归档结构顺序

Zip64的正确写入顺序不能出错,必须是:

  • 所有文件的本地文件头 + 压缩数据
  • 所有文件的中央目录条目(含Zip64扩展字段)
  • Zip64 EOCD记录
  • Zip64 EOCL定位器
  • 标准Zip EOCD记录(其中number of this disk、number of the disk with the start of the central directory、total number of entries in the central directory、size of the central directory需设为0xFFFF,触发Zip64解析逻辑)

顺序混乱会直接导致工具无法识别Zip64记录,甚至误判为多卷归档。

2. 校验Zip64结构体字段

确保结构体完全符合Zip64规范:

  • Zip64 EOCD的signature必须为0x06064b50,size of zip64 end of central directory record需准确计算(为整个记录字节数减去signature的4字节)
  • Zip64 EOCD的number of this disk、number of the disk with the start of the central directory设为0(单卷归档),total number of entries和central directory size填真实值,不能用占位符
  • Zip64 EOCL的signature必须为0x07064b50,number of the disk with the start of the zip64 EOCD设为0,relative offset of zip64 EOCD需精准指向Zip64 EOCD的起始位置,total number of disks设为1

3. 不要遗漏中央目录条目的Zip64扩展字段

当文件大小超过4GB、总条目数超过65535时,每个中央目录条目必须添加0x0001标记的Zip64扩展字段,填入真实的64位文件大小、偏移量等值。缺失该字段会导致工具无法定位文件,出现文件缺失错误。

4. 清除多卷相关标记

所有结构体中的disk number字段统一设为0,不要误写为非0值;禁止写入多卷归档特有的签名或标记,避免unzip误判。

二、ASi UNIX扩展字段被忽略问题

1. 确认扩展字段的写入位置

ASi UNIX扩展字段(标记0x7855)必须同时添加到本地文件头和中央目录条目的额外字段中,且建议放在所有扩展字段的最前端(部分工具会优先解析第一个扩展字段)。

2. 严格遵循扩展字段格式

ASi UNIX扩展字段的格式不能出错:

  • tag:固定为0x7855
  • data size:至少16字节(包含权限、UID、GID等信息)
  • version:设为1
  • Unix permissions:转换为十六进制值(如0755对应0x1ED),注意小端序
  • UID、GID:填入实际用户/组ID,同样遵循小端序要求

3. 校验CRC计算逻辑

CRC值不匹配会导致工具忽略扩展字段或标记文件损坏:

  • CRC必须计算原始未压缩文件的内容,而非压缩后的数据
  • 计算时使用正确的初始值(0xFFFFFFFF)和最终异或值(0xFFFFFFFF)

4. 准确计算额外字段长度

本地文件头和中央目录条目中的extra field length字段,必须精确填写所有扩展字段的总字节数。长度计算错误会直接导致工具无法解析扩展字段。


内容的提问来源于stack exchange,提问作者user7934593

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:20:25