Maison  >  Article  >  interface Web  >  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

青灯夜游
青灯夜游avant
2021-05-14 11:00:362626parcourir

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 Buffer4906621e4f28d4de4703165e1c48080e, et la chaîne correspondante est renvoyée en conséquence;

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

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

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);  // 好

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, efba047232e9c30493e472f2bf6fc120 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);  // 好

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 bc19c5c32cd20c3c3f2e331d6251d270.

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>

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer