Hướng dẫn convert buffer to binary nodejs - chuyển đổi bộ đệm sang nodejs nhị phân

Tôi đang sử dụng Axios để yêu cầu hình ảnh từ URL như thế này:

const response = await axios.get('https://asite.dom/image/url', { responseType: 'arrayBuffer' }); 

Tôi không cần và không muốn lưu tệp cục bộ. Tôi chỉ cần dữ liệu nhị phân đơn giản để kiểm tra kích thước hình ảnh.

Vì vậy, tôi không muốn làm điều này

const bufferImage = Buffer.from(response.data, 'binary');

Bởi vì đó là một bộ đệm không phải là dữ liệu nhị phân.

Tôi đã cố gắng truy cập

response.data

Trực tiếp, nhưng đó cũng không phải là dữ liệu nhị phân của hình ảnh.

Ai có thể giúp tôi với điều này?

hỏi ngày 26 tháng 3 năm 2020 lúc 11:42Mar 26, 2020 at 11:42

Hướng dẫn convert buffer to binary nodejs - chuyển đổi bộ đệm sang nodejs nhị phân

Chỉ cần kiểm tra điều này và nó hoạt động:

const response = await axios.get(
  'https://example.com/image.png', { responseType: 'arraybuffer' }
); 

const bin = response.data.toString('binary');
console.log(bin);

Điều quan trọng dường như là bạn đã tận dụng b trong

const bufferImage = Buffer.from(response.data, 'binary');
0. Ngoài ra,
const bufferImage = Buffer.from(response.data, 'binary');
1 đã là một bộ đệm, vì vậy bạn chỉ có thể chuyển đổi trực tiếp nó thành một chuỗi.

Đã trả lời ngày 26 tháng 3 năm 2020 lúc 11:56Mar 26, 2020 at 11:56

Aiyanaiyanaiyan

3963 Huy hiệu bạc11 Huy hiệu đồng3 silver badges11 bronze badges

2

Đối tượng đệm

Trong một thời gian dài, JavaScript đã thiếu hỗ trợ để xử lý các mảng dữ liệu nhị phân. Điều đó đã thay đổi với Ecmascript 2015, khi các mảng được gõ được giới thiệu và cho phép xử lý tốt hơn các trường hợp đó.

Tất cả các loại này xuất phát từ một lớp typedarray trừu tượng, mỗi loại chuyên về kích thước từ số nguyên cụ thể và ký kết, và một số cung cấp hỗ trợ dấu phẩy động. Float64array, ví dụ, đại diện cho một mảng gồm các số nổi 64 bit; Int16Array đại diện cho một loạt các số nguyên có chữ ký 16 bit.

Trong tất cả các mảng được đánh máy, hữu ích nhất có lẽ là Uint8array. Nó cho phép xử lý dữ liệu nhị phân như tệp hình ảnh, giao thức mạng và phát video theo cách tương tự như cách thực hiện trong các ngôn ngữ lập trình khác.

Trong thế giới Node.js, có một lớp khác, Buffer, đi xuống từ Uint8array. Nó bổ sung một số phương thức tiện ích như Concat (), allocunSafe () và so sánh () và các phương thức để đọc và viết các loại số khác nhau, bắt chước những gì được cung cấp bởi lớp Dataview (ví dụ: readuint16be, writedoublele và swap32).

Mã hóa văn bản

Chủ đề mã hóa các ký tự văn bản sử dụng máy tính rất rộng lớn và phức tạp và tôi sẽ không đi sâu vào nó trong bài viết ngắn này.

Về mặt khái niệm, văn bản bao gồm các ký tự: các phần nhỏ nhất của nội dung có ý nghĩa - thường là các chữ cái, nhưng tùy thuộc vào ngôn ngữ có thể có các biểu tượng rất khác nhau. Sau đó, mỗi ký tự được gán một điểm mã: một số xác định nó trong mối quan hệ một-một.

Cuối cùng, mỗi điểm mã có thể được biểu diễn bằng một chuỗi các bit theo một mã hóa. Mã hóa là một bảng ánh xạ từng mã chỉ vào chuỗi bit tương ứng của nó.

Nó có thể trông giống như một bản đồ đơn giản, nhưng một số mã hóa đã được tạo ra trong những thập kỷ qua để phù hợp với nhiều kiến ​​trúc máy tính và các bộ ký tự khác nhau. & NBSP;

Mã hóa phổ biến nhất là ASCII.

Nó bao gồm các ký tự Latin cơ bản (A-Z, chữ hoa và chữ thường), chữ số và nhiều ký hiệu dấu chấm câu, bên cạnh một số ký tự điều khiển. ASCII là mã hóa 7 bit, nhưng máy tính lưu trữ dữ liệu trong các khối 8 bit được gọi là byte, vì vậy nhiều mã hóa 8 bit đã được tạo, mở rộng 128 ký tự ASCII đầu tiên với 128 ký tự cụ thể ngôn ngữ khác.

Một mã hóa rất phổ biến là ISO-8859-1, còn được biết đến bởi một số tên khác như "Latin1", "IBM819", "CP819" và thậm chí "WE8ISO8859P1". ISO-8859-1 thêm một số biểu tượng bổ sung cho ASCII và nhiều chữ cái có dấu như Á, ú, è và õ.

Những mã hóa cụ thể về ngôn ngữ hoạt động hợp lý cho một số tình huống nhưng thất bại thảm hại trong bối cảnh đa ngôn ngữ.

Mất thông tin và tham nhũng dữ liệu là phổ biến vì các chương trình đã cố gắng thao tác văn bản bằng cách sử dụng mã hóa không chính xác cho một tệp.

Ngay cả hiển thị nội dung tệp là một mớ hỗn độn, bởi vì các tệp văn bản không bao gồm tên của mã hóa được sử dụng để mã hóa nội dung của nó.

Cố gắng sửa chữa điều đó, tiêu chuẩn Unicode đã được bắt đầu vào những năm 1980. Mục tiêu của họ là ánh xạ mọi nhân vật hiện đang được sử dụng trong mọi ngôn ngữ của con người (và một số kịch bản lịch sử) đến một điểm mã duy nhất.

Tiêu chuẩn Unicode cũng xác định một số mã hóa chung có thể mã hóa mọi điểm mã Unicode.

Các mã hóa phổ biến nhất cho Unicode là UTF-16, UCS-2, UTF-32 và UTF-8. Ngoại trừ UCS-2, sử dụng chiều rộng cố định cho tất cả các điểm mã (do đó ngăn nó biểu thị tất cả các ký tự Unicode), tất cả các mã hóa này đều sử dụng một số bit biến để mã hóa từng điểm mã.

Trên web, mã hóa Unicode được sử dụng rộng rãi nhất là UTF-8, bởi vì nó hiệu quả một cách hợp lý cho nhiều mục đích sử dụng. Nó sử dụng 1 byte cho các ký tự ASCII và 2 byte cho hầu hết các kịch bản châu Âu và Trung Đông - nhưng nó kém hiệu quả hơn đối với các tập lệnh châu Á, đòi hỏi 3 byte trở lên. Ví dụ, người Pháp nói rằng "Il Vaut Mieux Prévenir Que Guérir" tương đương với chuỗi byte sau đây khi nó được mã hóa bằng UTF-8 (các byte được hiển thị bằng thập lục phân):

Tôil vmộtut mtôieut mtôie
49 x20 76 61 75 74 20 P69 65 75 78 20 70 72 ré
vextôitôi eue xuetôitôitôi
76 65 e69 72 20 71 75 65 20 67 75 ré72 69 72

6c

6d

const b = Buffer.from([101, 120, 97, 109, 112, 108, 101]);
console.log(b.toString()); // example

C3

const b = Buffer.from([101, 120, 97, 109, 112, 108, 101]);
console.log(b.toString('latin1')); // example

A9

N Q.
g
6e
Chuyển đổi bộ đệm thành chuỗi node.js
Đã nói tất cả những điều đó, nội dung của bộ đệm có thể được chuyển đổi nhanh chóng thành một chuỗi bằng phương thức toString ():
Hãy nhớ rằng bài phát biểu về mã hóa văn bản? Chà, lớp bộ đệm sử dụng UTF-8 theo mặc định khi chuyển đổi sang/từ các chuỗi, nhưng bạn cũng có thể chọn một bộ khác từ một bộ mã hóa nhỏ được hỗ trợ:Hầu hết thời gian, UTF-8 là lựa chọn tốt nhất cho cả đọc và viết. Nhưng để hoàn thiện, đây là danh sách đầy đủ các mã hóa được hỗ trợ trong Node.js (tính đến tháng 9/2021) - Tên không nhạy cảm với trường hợp:
Mã hóaBí danh được chấp nhận
asciicơ sở64
cơ sở64urlHex

Latin1

nhị phân

const s = Buffer.from('example', 'utf8');
console.log(s); // 

UCS2

const b = Buffer.alloc(10);
console.log(b);
// 

b.write('example', 'utf8');
console.log(b);
// 

UCS-2

const b = Buffer.alloc(10);
b.write('test', 4, 'utf8');
console.log(b);
// 

UTF8

UTF-8

UTF16LE

  • UTF-16LE
  • Chuyển đổi chuỗi node.js thành bộ đệm
  • Cũng có thể chuyển đổi dữ liệu theo hướng ngược lại. Bắt đầu từ một chuỗi, bạn có thể tạo một bộ đệm mới từ nó (nếu mã hóa không được chỉ định, Node.js giả định UTF-8):
  • Nếu bạn cần viết văn bản vào một đối tượng bộ đệm hiện có, bạn có thể sử dụng phương thức ghi () của nó:

Buffer có phải là nhị phân không?

Bộ đệm chỉ xử lý dữ liệu nhị phân và nó không thể thay đổi được.Mỗi số nguyên trong một bộ đệm đại diện cho một byte.Bảng điều khiển.Hàm log () được sử dụng để in thể hiện bộ đệm., and it can not be resizable. Each integer in a buffer represents a byte. console. log() function is used to print the Buffer instance.

Làm cách nào để giải mã dữ liệu bộ đệm?

Phương thức toString () được sử dụng để giải mã hoặc chuyển đổi bộ đệm thành một chuỗi, theo loại mã hóa ký tự được chỉ định.Chuyển đổi bộ đệm thành một chuỗi được gọi là mã hóa và chuyển đổi một chuỗi thành bộ đệm được gọi là giải mã. is used to decode or convert a buffer to a string, according to the specified character encoding type. Converting a buffer to a string is known as encoding, and converting a string to a buffer is known as decoding.

Bạn có thể JSON phân tích một bộ đệm không?

Bộ đệm có thể chuyển đổi sang JSON.JSON chỉ định rằng loại đối tượng được biến đổi là bộ đệm và dữ liệu của nó.. The JSON specifies that the type of object being transformed is a Buffer , and its data.

Làm thế nào để bạn giải mã một bộ đệm nhị phân cho một hình ảnh trong nút js?

readSync (fd, imageBuffer, 0, kích thước, địa chỉ); hãy để imgdata = new blob (nhị phân. bộ đệm, {type: 'application/octet nhị phân'}); Let link = url.createdObjectURL (imgData); dữ liệu.src = hình ảnh mới (); img.