2016-05-25 18 views
13

Tôi đang sử dụng một thư viện có chức năng gọi hàm trả về giá trị toString của bộ đệm.Chuyển đổi chuỗi thành bộ đệm Node

Mã chính xác là

return Buffer.concat(stdOut).toString('utf-8'); 

Nhưng tôi không muốn chuỗi phiên bản của nó.

Tôi chỉ muốn bộ đệm

Vậy làm thế nào để chuyển đổi chuỗi trở lại bộ đệm.

Something như thế nào nếu

var bufStr = Buffer.concat(stdOut).toString('utf-8'); 
//convert bufStr back to only Buffer.concat(stdOut). 

Làm thế nào để làm điều này?

tôi đã cố gắng làm

var buf = Buffer.from(bufStr, 'utf-8'); 

Nhưng nó ném utf-8 không phải là một hàm. Khi tôi làm

var buf = Buffer.from(bufStr); 

Nó ném TypeError: đây không phải là mảng được nhập.

Cảm ơn

Trả lời

27

Bạn có thể làm:

var buf = Buffer.from(bufStr, 'utf8'); 

Nhưng đây là một chút ngớ ngẩn, vì vậy đề nghị khác sẽ được sao chép số lượng tối thiểu của mã ra khỏi chức năng kêu gọi để cho phép bản thân truy cập vào bộ đệm gốc. Điều này có thể khá dễ dàng hoặc khá khó khăn tùy thuộc vào chi tiết của thư viện đó.

+1

Tôi đã cố gắng thực hiện 'Buffer.from (bufStr, 'utf- 8 '); 'nhưng nó nói utf-8 không phải là một hàm. Nếu tôi bỏ qua đối số thứ hai utf-8 thì nó sẽ ném TypeError: đây không phải là một mảng được đánh máy. – Aniket

+5

@Aniket: Có thể phiên bản Node của bạn cũ hơn. Hãy thử chỉ 'đệm (bufStr)' thay thế cho đến khi bạn nâng cấp. –

+0

Thực ra, nó phải là 'utf8' và không phải là 'utf-8'. Đã chỉnh sửa câu trả lời. –

2

Bạn có thể sử dụng Buffer.from() để chuyển đổi chuỗi thành bộ đệm. Thông tin thêm về vấn đề này có thể được tìm thấy here

var buf = Buffer.from('some string', 'encoding'); 

ví dụ

var buf = Buffer.from(bStr, 'utf-8'); 
2

Lưu ý: Chỉ cần reposting bình luận John Zwinck như câu trả lời.

Một vấn đề có thể là bạn đang sử dụng phiên bản cũ hơn của nút (cho thời điểm này, tôi không thể nâng cấp, mã được đánh dấu bằng v4.3.1). giải pháp đơn giản ở đây là, bằng cách sử dụng cách chấp nhận:

new Buffer(bufferStr) 
0

này đang làm việc cho tôi, bạn có thể thay đổi mã của bạn như thế này

var responseData=x.toString(); 

để

var responseData=x.toString("binary"); 

và cuối cùng

response.write(new Buffer(toTransmit, "binary")); 
Các vấn đề liên quan