使用 Buffer.alloc 的 nodejs 中的 base64 转换问题

Problem with base64 conversion in nodejs using Buffer.alloc

我正在尝试将一些过去使用不安全的 Buffer 构造函数的 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(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();