[英]Problem with base64 conversion in nodejs using Buffer.alloc
我正在尝试转换一些 base64 转换代码,这些转换代码曾经使用不安全的 Buffer 构造函数来使用 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);
这是 output:
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
( doc ) 不适合您想要实现的目标。 Buffer.alloc
的第二个参数是用该值完全填充缓冲区,必要时重复。 通常用于创建一个零填充缓冲区,如下所示:
// 0 is the default value, so is not needed actually. Set for demo purposes.
let zerobuf = Buffer.alloc(1000, 0);
在这种情况下,您需要的是Buffer.from
( doc ):
let base64Text = Buffer.from(str).toString("base64");
let reconstitutedData = Buffer.from(base64Text, "base64").toString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.