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

如何将utf8格式读取的Zip文件内容转换为Buffer(JavaScript)

如何将UTF-8编码读取的Zip字符串还原为原始Buffer

当你用fs.readFile("test.zip", "utf8")读取Zip这类二进制文件时,本质是把原始二进制字节流强行按UTF-8规则解析成字符串。但Zip文件包含大量非UTF-8合法字节序列,Node.js会把这些无法解析的字节替换成�(U+FFFD),这部分数据已经永久丢失,无法完全还原回原始Buffer。

你的转换代码为什么无效

你写的转换函数逻辑错误:UTF-8是可变长编码,一个字符可能对应1-4个字节,直接用charCodeAt(i)取字符的Unicode编码当作单个字节写入Buffer,完全不符合UTF-8的编码规则,所以转换结果必然和原始Buffer不符。

正确的处理方案

  1. 最优方案:直接获取原始Buffer
    如果能控制API的返回格式,让API直接返回原始二进制Buffer(等同于fs.readFile("test.zip")的结果),这是最可靠的方式,完全不会丢失数据。

  2. 退而求其次:用Base64中转
    如果API必须返回字符串,让它把原始Buffer转成Base64编码的字符串(buffer.toString('base64')),你收到后再用以下代码还原:

    const buf = Buffer.from(apiReturnedStr, 'base64');
    

    这种方式能完整恢复原始Buffer,不会丢失任何数据。

  3. 仅当只能拿到UTF-8字符串时的无奈处理
    如果你只能拿到已经用UTF-8解析后的字符串,唯一能做的是用Node.js内置的UTF-8转Buffer方法:

    const buf = Buffer.from(apiReturnedStr, 'utf8');
    

    但必须明确:那些被替换成�的字节无法恢复,转换后的Buffer和原始Zip文件的Buffer会有差异,大概率无法正常解压。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:55:37