10

NodeJS文档强调binary字符串编码是非常不鼓励的,因为它会在将来的某个时候被删除。

但是,我正在尝试使用该模块生成图像缩略图,该node-imagemagick模块只能输出binary编码字符串。

我的最终目标是将生成的缩略图作为 BLOB 提交到 SQLite3 数据库(我正在使用node-sqlite3),所以我认为我需要将缩略图作为二进制 Buffer 对象。

如何将binary编码输出直接解码node-imagemagick为原始二进制缓冲区(不仅仅是包含binary编码字符串的缓冲区)?我不热衷于使用base64...

4

3 回答 3

18
const buffer = new Buffer(binaryString, "binary");

经测试:

$ node
> var binaryString = "\xff\xfa\xc3\x4e";
> var buffer = new Buffer(binaryString, "binary");
> console.log(buffer);
<Buffer ff fa c3 4e>

更新:从 v10.0.0 开始 -Buffer.from(string[, encoding])改为使用。

于 2012-12-11T16:14:28.400 回答
0

我不使用节点的 Buffer 进行编码。

如果这开始失败,您可以尝试iconv-litehttps://www.npmjs.com/package/iconv-lite ):

var encode = require("iconv-lite");
var binaryString = "\xff\xfa\xc3\x4e";
var buffer = encode(binaryString, "binary");
console.log(buffer);
// Prints <Buffer ff fa c3 4e>

更新iconv-lite库现在已切换到 es6 语法。所以下面的代码是行不通的。您必须执行以下操作:

import { encode } from "iconv-lite";

不会更新我的代码,因为这会不断变化。查阅文档: https ://github.com/ashtuchkin/iconv-lite

于 2016-05-27T23:25:05.417 回答
0
const bin = 'PK\u0003\u0004\n\u0000\u0000\u0000\b\u0000\u0013{yB½g].9\u0001\u0000\u00005\u0004\u0000\u0000\u0013\u0000\u0000\u0000[Content_Types].xml'
const buf = new Buffer.from(bin, 'binary');
console.log(buf)
// <Buffer 50 4b 03 04 0a 00 00 00 08 00 13 7b 79 42 bd 67 5d 2e 39 01 00 00 35 04 00 00 13 00 00 00 5b 43 6f 6e 74 65 6e 74 5f 54 79 70 65 73 5d 2e 78 6d 6c>
于 2020-10-28T02:41:54.373 回答