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

Node.js中Base64转原始二进制数据错误的技术求助

问题:Base64转原始二进制数据不符合预期

我在第三方平台的定制化Node.js环境中编写业务脚本,需要将Base64字符串转为原始加密二进制数据并赋值给classA.data.raw,但转换结果不符合预期。

相关信息

  • 示例Base64数据:
    nzx4qnf7g23hNvS1Fj4iMU56uGwhCY7CazUsEt5gPOs=
    
  • 预期原始二进制形式(Python bytes表示):
    b'\x9f<x\xaaw\xfb\x83m\xe16\xf4\xb5\x16>"1Nz\xb8l!\t\x8e\xc2k5,\x12\xde`<\xeb'
    
  • 当前使用的脚本:
    var encryped_b64 = 'nzx4qnf7g23hNvS1Fj4iMU56uGwhCY7CazUsEt5gPOs=';
    classA.data.raw = Buffer.from(encryped_b64 , 'base64').toString('binary');
    classA.send_data();
    
  • 实际转换结果(Python bytes表示):
    b'\xc2\x9f<x\xc2\xaaw\xc3\xbb\xc2\x83m\xc3\xa16\xc3\xb4\xc2\xb5\x16>"1Nz\xc2\xb8l!\t\xc2\x8e\xc3\x82k5,\x12\xc3\x9e`<\xc3\xab'
    

解决方案

问题出在你调用了toString('binary')——Node.js中Buffer.toString('binary')实际上是将字节编码为Latin-1字符集,这会导致原本的单字节值被转成多字节的UTF-8编码(比如0x9f变成\xc2\x9f),破坏了原始二进制数据结构。

直接将Base64解析后的Buffer对象赋值给classA.data.raw即可,不需要转成字符串:

var encryped_b64 = 'nzx4qnf7g23hNvS1Fj4iMU56uGwhCY7CazUsEt5gPOs=';
classA.data.raw = Buffer.from(encryped_b64, 'base64');
classA.send_data();

如果定制化环境不允许直接赋值Buffer,尝试将Buffer转为Uint8Array(原始字节数组):

var encryped_b64 = 'nzx4qnf7g23hNvS1Fj4iMU56uGwhCY7CazUsEt5gPOs=';
classA.data.raw = new Uint8Array(Buffer.from(encryped_b64, 'base64'));
classA.send_data();

原理是:Buffer.from(b64, 'base64')已经直接解析出了原始的二进制字节,转字符串会引入编码转换,只有直接传递Buffer或Uint8Array才能保留预期的二进制字节。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:46:08