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

Node.js中hex转Buffer经utf-8中转后转回hex内容不一致如何解决

问题根因

你遇到的转换偏差是因为非法UTF-8字节被自动替换导致的:
UTF-8是变长编码规则,单字节合法范围为0x00~0x7F,你原始Buffer里的0x85不属于合法UTF-8单字节序列,调用toString('utf-8')时,Node.js会自动将非法字节替换为U+FFFD替换字符,该字符对应的UTF-8编码就是0xEF 0xBF 0xBD,也就是你看到输出里的EFBFBD。
这种方式本质是用文本编码去处理二进制内容,必然会出现信息损失。

无损传输实现方案

不要用UTF-8编码转换二进制Buffer,选择专门用于二进制转文本的编码格式即可,以下是两种主流实现:

方案1:Base64编码(推荐,传输效率高)

Base64编码后长度为原始数据的4/3,是二进制内容字符串传输的通用方案,实现代码如下:

const hex_message = "7E01000036015211601385025E";
const chunk = Buffer.from(hex_message, 'hex');

// 发送端:Buffer转Base64字符串
const transmitStr = chunk.toString('base64');

// 接收端:Base64字符串还原Buffer
const restoredBuf = Buffer.from(transmitStr, 'base64');
const restoredHex = restoredBuf.toString('hex').toUpperCase();
// 输出:7E01000036015211601385025E,和原始内容完全一致

方案2:Hex编码(可读性高)

如果需要传输后的字符串可以直接看到原始字节值,可以选择Hex编码,编码后长度为原始数据的2倍,实现代码如下:

const hex_message = "7E01000036015211601385025E";
const chunk = Buffer.from(hex_message, 'hex');

// 发送端:Buffer转Hex字符串
const transmitStr = chunk.toString('hex');

// 接收端:Hex字符串还原Buffer
const restoredBuf = Buffer.from(transmitStr, 'hex');
const restoredHex = restoredBuf.toString('hex').toUpperCase();
// 输出:7E01000036015211601385025E,和原始内容完全一致

方案选择建议

  • 微服务跨进程传输的通用场景优先选Base64,传输效率更高
  • 如果有调试、人工查看传输内容的需求,可选择Hex编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:02