如何将“二进制”编码的字符串解码为原始二进制缓冲区?

时间:2012-12-11 16:00:25

标签: node.js encoding binary imagemagick buffer

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

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

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

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

3 个答案:

答案 0 :(得分:15)

var 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>

答案 1 :(得分:0)

我不使用node的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

答案 2 :(得分: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>
相关问题