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.
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.
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('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); // 你
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('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); // 好
L'exemple suivant montre l'écriture de plusieurs octets plusieurs fois,string_decoder
Comment 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('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)
, 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('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>
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.
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!