Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Buffer.alloc在nodejs中进行base64转换时出现问题_Javascript_Node.js_Base64 - Fatal编程技术网

Javascript 使用Buffer.alloc在nodejs中进行base64转换时出现问题

Javascript 使用Buffer.alloc在nodejs中进行base64转换时出现问题,javascript,node.js,base64,Javascript,Node.js,Base64,我试图将一些用于使用不安全缓冲区构造函数的base64转换代码转换为使用Buffer.alloc方法,但转换的行为异常。这是我的密码: let originalText = JSON.stringify({city: "New York", date: "2020/05/12"}); console.log("DATA: " + originalText) let base64Text = Buffer.alloc(originalText.length, original

我试图将一些用于使用不安全缓冲区构造函数的base64转换代码转换为使用Buffer.alloc方法,但转换的行为异常。这是我的密码:

let originalText = JSON.stringify({city: "New York", date: "2020/05/12"});
console.log("DATA:           " + originalText)

let base64Text = Buffer.alloc(originalText.length, originalText, "binary").toString('base64');
console.log("Base64 version: " + base64Text);

let loadedBuffer = Buffer.alloc(base64Text.length, base64Text, 'base64');

const reconstitutedData  = loadedBuffer.toString();
console.log("Result:         " + reconstitutedData);
以下是输出:

DATA:           {"city":"New York","date":"2020/05/12"}
Base64 version: eyJjaXR5IjoiTmV3IFlvcmsiLCJkYXRlIjoiMjAyMC8wNS8xMiJ9
Result:         {"city":"New York","date":"2020/05/12"}{"city":"New
除了末尾重复的位外,转换是正确的。显然,base64字符串的长度不是这里使用的正确长度,但这毫无意义,因为似乎没有办法知道原始字符串的长度。也许我使用的API是错误的?

Buffer.alloc
()不是您想要实现的。
Buffer.alloc
的第二个参数是用该值填充整个缓冲区,必要时重复。通常用于创建零填充缓冲区,如下所示:

// 0 is the default value, so is not needed actually. Set for demo purposes.
let zerobuf = Buffer.alloc(1000, 0);
在这种情况下,您需要的是
缓冲区

let base64Text = Buffer.from(str).toString("base64");
let reconstitutedData = Buffer.from(base64Text, "base64").toString();