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

使用jQuery $.get获取二进制文件后解压失败:invalid code length set问题排查

解决二进制文件获取与解压的"invalid code length set"错误

嘿,我一眼就看出问题出在哪了!你用$.get请求二进制文件的方式不对——jQuery默认会把响应当成文本来解析,这直接破坏了二进制数据的原始字节,后续解压自然会报格式错误。下面给你一步步解决的方案:

核心问题分析

$.get是为文本数据设计的,它会自动把响应按UTF-8编码转成字符串。但二进制文件(比如你的.hsm文件)里有很多不在UTF-8有效范围内的字节,这些字节会被替换成占位符�,导致原始数据损坏,解压时就会出现"invalid code length set"这类编码错误。

正确的二进制文件获取方式

方式1:用原生XMLHttpRequest(兼容性好)

直接指定响应类型为arraybuffer,让浏览器保留原始二进制数据:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'metafile.hsm', true);
xhr.responseType = 'arraybuffer'; // 关键:告诉浏览器这是二进制数据

xhr.onload = function() {
  if (this.status === 200) {
    const rawBinaryData = this.response; // 这里拿到的是ArrayBuffer类型的原始数据
    readCellFile(rawBinaryData);
  }
};

xhr.send();

方式2:用现代的Fetch API(更简洁)

Fetch原生支持二进制响应,代码更优雅:

fetch('metafile.hsm')
  .then(response => {
    if (!response.ok) throw new Error('请求失败');
    return response.arrayBuffer();
  })
  .then(rawBinaryData => readCellFile(rawBinaryData))
  .catch(err => console.error('出问题啦:', err));

方式3:如果一定要用jQuery

可以通过$.ajax的xhrFields配置强制指定响应类型:

$.ajax({
  url: 'metafile.hsm',
  xhrFields: {
    responseType: 'arraybuffer'
  },
  success: function(rawBinaryData) {
    readCellFile(rawBinaryData);
  },
  error: function(xhr, status, err) {
    console.error('请求出错:', err);
  }
});

修改你的readCellFile函数

现在传入的是ArrayBuffer类型的原始数据,不需要再用FileReader(除非你要转成File对象)。直接把它转成Uint8Array(大多数解压库都支持这个类型):

function readCellFile(arrayBuffer) {
  const uint8Data = new Uint8Array(arrayBuffer);
  // 这里调用你的解压逻辑,比如用pako、zlib.js等库
  try {
    // 示例:用pako解压gzip格式的数据
    const decompressedData = pako.inflate(uint8Data);
    // 接下来处理解压后的内容,比如转成字符串或其他格式
    const content = new TextDecoder('utf-8').decode(decompressedData);
    console.log('解压成功:', content);
  } catch (err) {
    console.error('解压失败:', err);
  }
}

这样处理后,原始二进制数据就不会被破坏,解压时自然就不会再报编码相关的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:15:46