您好,登錄后才能下訂單哦!
小編給大家分享一下Nodejs中如何使用string_decoder模塊將buffer轉(zhuǎn)成string,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
本篇文章給大家介紹一下Nodejs中使用string_decoder模塊將buffer轉(zhuǎn)成string的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
string_decoder
模塊用于將Buffer轉(zhuǎn)成對應(yīng)的字符串。使用者通過調(diào)用stringDecoder.write(buffer)
,可以獲得buffer對應(yīng)的字符串?!就扑]學(xué)習(xí):《nodejs 教程》】
它的特殊之處在于,當傳入的buffer不完整(比如三個字節(jié)的字符,只傳入了兩個),內(nèi)部會維護一個internal buffer將不完整的字節(jié)cache住,等到使用者再次調(diào)用stringDecoder.write(buffer)
傳入剩余的字節(jié),來拼成完整的字符。
這樣可以有效避免buffer不完整帶來的錯誤,對于很多場景,比如網(wǎng)絡(luò)請求中的包體解析等,非常有用。
這節(jié)分別演示了decode.write(buffer)
、decode.end([buffer])
兩個主要API的用法。
例子一:
decoder.write(buffer)
調(diào)用傳入了Buffer對象<Buffer e4 bd a0>
,相應(yīng)的返回了對應(yīng)的字符串你
;
const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你') => <Buffer e4 bd a0> const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0])); console.log(str); // 你
例子二:
當decoder.end([buffer])
被調(diào)用時,內(nèi)部剩余的buffer會被一次性返回。如果此時帶上buffer
參數(shù),那么相當于同時調(diào)用decoder.write(buffer)
和decoder.end()
。
const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd> let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5])); console.log(str); // 你 str = decoder.end(Buffer.from([0xbd])); console.log(str); // 好
下面的例子,演示了分多次寫入多個字節(jié)時,string_decoder
模塊是怎么處理的。
首先,傳入了<Buffer e4 bd a0 e5 a5>
,好
還差1個字節(jié),此時,decoder.write(xx)
返回你
。
然后,再次調(diào)用decoder.write(Buffer.from([0xbd]))
,將剩余的1個字節(jié)傳入,成功返回好
。
const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd> let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5])); console.log(str); // 你 str = decoder.write(Buffer.from([0xbd])); console.log(str); // 好
decoder.end(buffer)
時,僅傳入了好
的第1個字節(jié),此時調(diào)用decoder.end()
,返回了?
,對應(yīng)的buffer為<Buffer ef bf bd>
。
const StringDecoder = require('string_decoder').StringDecoder; // Buffer.from('好') => <Buffer e5 a5 bd> let decoder = new StringDecoder('utf8'); let str = decoder.end( Buffer.from([0xe5]) ); console.log(str); // ? console.log(Buffer.from(str)); // <Buffer ef bf bd>
官方文檔對于這種情況的解釋是這樣的(跟廢話差不多),大約是約定俗成了,當utf8
碼點無效時,替換成ef bf bd
。
Returns any remaining input stored in the internal buffer as a string. Bytes representing incomplete UTF-8 and UTF-16 characters will be replaced with substitution characters appropriate for the character encoding.
以上是“Nodejs中如何使用string_decoder模塊將buffer轉(zhuǎn)成string”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。