Heim > Artikel > Web-Frontend > Verwenden Sie das Modul string_decoder in Nodejs, um den Puffer in einen String zu konvertieren
In diesem Artikel erfahren Sie, wie Sie das Modul string_decoder in Nodejs zum Konvertieren von Puffer in einen String verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Das Modul string_decoder
wird verwendet, um Buffer in den entsprechenden String umzuwandeln. Benutzer können die dem Puffer entsprechende Zeichenfolge erhalten, indem sie stringDecoder.write(buffer)
aufrufen. [Empfohlenes Lernen: „nodejs Tutorialstring_decoder
模块用于将Buffer转成对应的字符串。使用者通过调用stringDecoder.write(buffer)
,可以获得buffer对应的字符串。【推荐学习:《nodejs 教程》】
它的特殊之处在于,当传入的buffer不完整(比如三个字节的字符,只传入了两个),内部会维护一个internal buffer将不完整的字节cache住,等到使用者再次调用stringDecoder.write(buffer)
传入剩余的字节,来拼成完整的字符。
这样可以有效避免buffer不完整带来的错误,对于很多场景,比如网络请求中的包体解析等,非常有用。
这节分别演示了decode.write(buffer)
、decode.end([buffer])
两个主要API的用法。
例子一:
decoder.write(buffer)
调用传入了Buffer对象4906621e4f28d4de4703165e1c48080e
,相应的返回了对应的字符串你
;
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])
被调用时,内部剩余的buffer会被一次性返回。如果此时带上buffer
参数,那么相当于同时调用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); // 好
下面的例子,演示了分多次写入多个字节时,string_decoder
模块是怎么处理的。
首先,传入了efba047232e9c30493e472f2bf6fc120
,好
还差1个字节,此时,decoder.write(xx)
返回你
。
然后,再次调用decoder.write(Buffer.from([0xbd]))
,将剩余的1个字节传入,成功返回好
。
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个字节,此时调用decoder.end()
,返回了�
,对应的buffer为bc19c5c32cd20c3c3f2e331d6251d270
。
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
"]
Es ist etwas Besonderes Der Punkt ist, dass, wenn der eingehende Puffer unvollständig ist (z. B. werden nur zwei der Drei-Byte-Zeichen übergeben), intern ein interner Puffer verwaltet, um die unvollständigen Bytes zwischenzuspeichern, bis der Benutzer stringDecoder.write(buffer) aufruft )
Übergeben Sie die verbleibenden Bytes, um vollständige Zeichen zu buchstabieren. Dadurch können Fehler, die durch unvollständigen Puffer verursacht werden, wirksam vermieden werden, was für viele Szenarien sehr nützlich ist, z. B. für das Parsen des Paketkörpers in Netzwerkanforderungen usw.
decode.write(buffer)
und decode.end([buffer])Verwendung von zwei Haupt-APIs. <p></p>Beispiel 1: <p><a href="https://www.php.cn/course.html" target="_blank" textvalue="编程视频"><code>decoder.write(buffer)
-Aufruf übergibt das Pufferobjekt 4906621e4f28d4de4703165e1c48080e
und die entsprechende Zeichenfolge wird entsprechendSie;rrreeeBeispiel 2:🎜🎜Wenn decoder.end([buffer])
aufgerufen wird, wird der verbleibende interne Puffer sofort zurückgegeben. Wenn Sie zu diesem Zeitpunkt den Parameter buffer
verwenden, entspricht dies dem Aufruf von decoder.write(buffer)
und decoder.end()
zur gleichen Zeit. 🎜rrreeestring_decoder beim mehrmaligen Schreiben mehrerer Bytes
Wie Module verarbeitet werden. 🎜🎜Zuerst wird efba047232e9c30493e472f2bf6fc120
übergeben. Good
ist noch 1 Byte zu kurz. Zu diesem Zeitpunkt ist decoder.write(xx )
gibt Sie
zurück. 🎜🎜Dann rufen Sie decoder.write(Buffer.from([0xbd]))
erneut auf, übergeben das verbleibende 1 Byte und geben Good
erfolgreich zurück. 🎜rrreeedecoder.end(buffer)
, nur The Das erste Byte von good
wird übergeben. Zu diesem Zeitpunkt wird decoder.end()
aufgerufen und �
wird zurückgegeben bc19c5c32cd20c3c3f2e331d6251d270. 🎜rrreee🎜Das offizielle Dokument erklärt diese Situation wie folgt (fast wie Unsinn). Wenn der Codepunkt utf8
ungültig ist, ersetzen Sie ihn durch ef bf bd
. 🎜🎜🎜Gibt alle im internen Puffer gespeicherten verbleibenden Eingaben als Zeichenfolge zurück. Bytes, die unvollständige UTF-8- und UTF-16-Zeichen darstellen, werden durch Ersatzzeichen ersetzt, die für die Zeichenkodierung geeignet sind.🎜🎜🎜🎜Verwandte Links🎜🎜🎜Das sollten Sie tun Merken Sie sich ein UTF-8-Zeichen „EF BF BD“ http://liudanking.com/golang/utf-8_replacement_character/🎜🎜Weitere Programmierkenntnisse finden Sie unter: 🎜Programmiervideo🎜! ! 🎜Das obige ist der detaillierte Inhalt vonVerwenden Sie das Modul string_decoder in Nodejs, um den Puffer in einen String zu konvertieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!