Cet article présente principalement le codage et le décodage avancés des caractères côté serveur et le traitement tronqué de Nodejs. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
Écrit devant<.>
Dans le développement de serveurs Web, l'encodage et le décodage des caractères doivent être traités presque quotidiennement. Une fois que l’encodage et le décodage ne sont pas gérés correctement, des caractères tronqués gênants apparaîtront. De nombreux étudiants engagés dans le développement de serveurs de nœuds se retrouvent souvent perdus lorsqu'ils rencontrent des problèmes dus à une connaissance insuffisante des codes de codage de caractères et passent beaucoup de temps à dépanner et à résoudre des problèmes. Le texte présente d'abord brièvement les connaissances de base du codage et du décodage de caractères, puis donne des exemples sur la façon de coder et de décoder dans un nœud, et enfin est un exemple de code côté serveur. Des exemples de code liés à cet article peuvent être trouvés ici.À propos du codage et du décodage des caractères
Dans le processus de communication réseau, des bits binaires sont transmis, que le contenu envoyé soit du texte ou des images, la langue utilisée est c'est du chinois ou de l'anglais. Par exemple, le client envoie "Bonjour" au serveur.客户端 --- 你好 ---> 服务端
À propos des jeux de caractères et des encodages de caractères
Le problème de la conversion des caractères et des binaires est mentionné ci-dessus. Étant donné que les deux peuvent être convertis l'un en l'autre, c'est-à-dire qu'il existe des règles de conversion claires et que les caractères binaires <-> Les règles de conversion mentionnées ici sont en fait les jeux de caractères et les encodages de caractères que nous entendons souvent. Un jeu de caractères est un ensemble de caractères (texte, signes de ponctuation, etc.). Il existe de nombreux jeux de caractères, les plus courants incluent ASCII, Unicode, GBK, etc. La principale différence entre les différents jeux de caractères réside dans le nombre de caractères qu’ils contiennent. Après avoir compris le concept de jeu de caractères, introduisons le codage des caractères. Le jeu de caractères nous indique quels caractères sont pris en charge, mais la manière d'encoder des caractères spécifiques est déterminée par l'encodage des caractères. Par exemple, le jeu de caractères Unicode prend en charge les codages de caractères tels que UTF8 (couramment utilisé), UTF16 et UTF32. Pour résumer :Exemples d'encodage et de décodage de caractères
Les connaissances de base requises pour l'encodage et le décodage de caractères ont été mentionnées ci-dessus. Regardons un exemple simple ci-dessous, dans lequel nous utilisons la bibliothèque icon-lite pour nous aider à implémenter les opérations d'encodage et de décodage. Comme vous pouvez le voir, nous utilisons gbk lors de l'encodage des caractères. Lors du décodage, si vous utilisez également gbk, vous pouvez obtenir les caractères originaux. Lorsque nous utilisons utf8 lors du décodage, des caractères tronqués apparaissent.var iconv = require('iconv-lite'); var oriText = '你'; var encodedBuff = iconv.encode(oriText, 'gbk'); console.log(encodedBuff); // <Buffer c4 e3> var decodedText = iconv.decode(encodedBuff, 'gbk'); console.log(decodedText); // 你 var wrongText = iconv.decode(encodedBuff, 'utf8'); console.log(wrongText); // ��
Exemple pratique : encodage et décodage côté serveur
Généralement, les scénarios dans lesquels nous devons traiter avec codage et décodage, fichiers Lecture, écriture et traitement des demandes réseau. Voici un exemple de requête réseau, présentant comment encoder et décoder côté serveur. Supposons que nous exécutions le service http suivant, en écoutant les demandes des clients. Le client utilise le codage lors de la transmission des données, tandis que le serveur utilise le codage gbk
par défaut. utf8
est utilisée pour décoder la demande à ce moment-là, des caractères tronqués apparaîtront, un traitement spécial est donc requis. utf8
var http = require('http'); var iconv = require('iconv-lite'); // 假设客户端采用post方法,编码为gbk var server = http.createServer(function (req, res) { var chunks = []; req.on('data', function (chunk) { chunks.push(chunk) }); req.on('end', function () { chunks = Buffer.concat(chunks); // 对二进制进行解码 var body = iconv.decode(chunks, 'gbk'); console.log(body); res.end('HELLO FROM SERVER'); }); }); server.listen(3000);
var http = require('http'); var iconv = require('iconv-lite'); var charset = 'gbk'; // 对字符"你"进行编码 var reqBuff = iconv.encode('你', charset); var options = { hostname: '127.0.0.1', port: '3000', path: '/', method: 'POST', headers: { 'Content-Type': 'text/plain', 'Content-Encoding': 'identity', 'Charset': charset // 设置请求字符集编码 } }; var client = http.request(options, function(res) { res.pipe(process.stdout); }); client.end(reqBuff);
À propos de la fonction de communication simple entre le serveur socket nodejs et le client
Comment utiliser ES6 dans un projet NodeJS
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!