2012-12-11 52 views
6

NodeJS docs強調binary字符串編碼非常令人沮喪,因爲它將在未來的某個時刻丟棄。如何將「二進制」編碼的字符串解碼爲原始二進制緩衝區?

但是,我試圖用node-imagemagick模塊生成圖像縮略圖,該模塊只能輸出binary編碼的字符串。

我的最終目標是將生成的縮略圖作爲BLOB提交到SQLite3數據庫(我使用的是node-sqlite3),所以我想我需要縮略圖作爲二進制Buffer對象。

如何直接將binary編碼的輸出從node-imagemagick解碼爲原始二進制緩衝區(而不僅僅是包含binary編碼字符串的緩衝區)?我並不熱衷於使用base64 ...

回答

3
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> 
+0

哦。那很簡單。我誤解了文檔... – Joshua

+1

您沒有誤解文檔。他們明確表示「二進制」編碼將被刪除!在捕獲ImageMagick的輸出以存儲到MongoDB中時,我也遇到了同樣的問題。 「二進制」是似乎能正確獲得數據庫中的標準輸出的唯一編碼。那麼有什麼選擇? –

+0

@WouterHuysentruit引發github上的庫作者更新他們的模塊以使用緩衝區的問題......在「'binary」'從節點中刪除之前它肯定會得到解決? – Esailija

0

我不使用節點的緩衝區進行編碼。

您可以嘗試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> 
相關問題