Maison > interface Web > js tutoriel > Utilisez le module string_decoder dans Nodejs pour convertir le tampon en chaîne

Utilisez le module string_decoder dans Nodejs pour convertir le tampon en chaîne

青灯夜游
Libérer: 2021-05-14 11:00:36
avant
2721 Les gens l'ont consulté

Cet article vous présentera comment utiliser le module string_decoder pour convertir un tampon en chaîne dans Nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Utilisez le module string_decoder dans Nodejs pour convertir le tampon en chaîne

Introduction au module Le module

string_decoder est utilisé pour convertir Buffer en la chaîne correspondante. Les utilisateurs peuvent obtenir la chaîne correspondant au tampon en appelant stringDecoder.write(buffer). [Étude recommandée : "tutoriel nodejs "]

La particularité est que lorsque le tampon entrant est incomplet (par exemple, trois octets de caractères, seuls deux sont transmis), un le tampon interne sera maintenu en interne pour mettre en cache les octets incomplets et attendra que l'utilisateur appelle à nouveau stringDecoder.write(buffer) pour transmettre les octets restants afin d'épeler les caractères complets.

Cela peut efficacement éviter les erreurs causées par des tampons incomplets et est très utile pour de nombreux scénarios, tels que l'analyse du corps du package dans les requêtes réseau.

Exemple de démarrage

Cette section montre l'utilisation des deux API principales decode.write(buffer) et decode.end([buffer]) respectivement.

Exemple 1 :

decoder.write(buffer)L'appel passe dans l'objet Buffer<Buffer e4 bd a0>, et la chaîne correspondante est renvoyée en conséquence;

const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;
const decoder = new StringDecoder(&#39;utf8&#39;);

// Buffer.from(&#39;你&#39;) => <Buffer e4 bd a0>
const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0]));
console.log(str);  // 你
Copier après la connexion

Exemple 2 :

Lorsque decoder.end([buffer]) est appelé, le tampon interne restant sera renvoyé immédiatement. Si vous apportez le paramètre buffer à ce moment, cela équivaut à appeler decoder.write(buffer) et decoder.end() en même temps.

const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;
const decoder = new StringDecoder(&#39;utf8&#39;);

// Buffer.from(&#39;你好&#39;) => <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);  // 好
Copier après la connexion

Exemple : écriture de plusieurs octets plusieurs fois

L'exemple suivant montre l'écriture de plusieurs octets plusieurs fois,string_decoderComment les modules sont traités.

Tout d'abord, <Buffer e4 bd a0 e5 a5> est transmis et est encore court de 1 octet. À ce moment, decoder.write(xx) renvoie .

Ensuite, appelez decoder.write(Buffer.from([0xbd])) à nouveau, transmettez le 1 octet restant et renvoyez avec succès.

const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;
const decoder = new StringDecoder(&#39;utf8&#39;);

// Buffer.from(&#39;你好&#39;) => <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);  // 好
Copier après la connexion

Exemple : Lorsque decoder.end(), le nombre d'octets n'est pas complètement traité

decoder.end(buffer), seul le 1er de est passé en octets , lorsque decoder.end() est appelé, est renvoyé et le tampon correspondant est <Buffer ef bf bd>.

const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;

// Buffer.from(&#39;好&#39;) => <Buffer e5 a5 bd>
let decoder = new StringDecoder(&#39;utf8&#39;);
let str = decoder.end( Buffer.from([0xe5]) );
console.log(str);  // �
console.log(Buffer.from(str));  // <Buffer ef bf bd>
Copier après la connexion

Le document officiel explique cette situation comme suit (presque comme un non-sens). C'est à peu près une convention. Lorsque le point de code utf8 est invalide, remplacez-le par ef bf bd.

Renvoie toute entrée restante stockée dans le tampon interne sous forme de chaîne. Les octets représentant les caractères UTF-8 et UTF-16 incomplets seront remplacés par des caractères de substitution appropriés au codage des caractères.

Liens connexes

Un caractère UTF-8 "EF BF BD" dont vous devriez vous souvenir http://liudanking.com/golang/utf-8_replacement_character/

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal