【问题标题】:Problem with base64 conversion in nodejs using Buffer.alloc使用 Buffer.alloc 在 nodejs 中进行 base64 转换的问题
【发布时间】:2020-06-17 20:30:52
【问题描述】:

我正在尝试将一些过去使用不安全的 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 有误?

【问题讨论】:

    标签: javascript node.js base64


    【解决方案1】:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多