Caractères chinois tronqués reçus par nodejs

PHPz
Libérer: 2023-05-08 09:33:06
original
820 Les gens l'ont consulté

Avec le développement d'Internet, de nombreux développeurs ont commencé à utiliser Node.js pour le développement back-end. Cependant, certains développeurs rencontreront le problème des caractères chinois tronqués lorsqu'ils utiliseront Node.js pour recevoir des caractères chinois. Cette question est à la fois confuse et difficile. Cet article présentera le problème des caractères chinois tronqués reçus par Node.js et proposera plusieurs solutions.

Description du problème

Lorsque vous utilisez Node.js pour recevoir des requêtes contenant des caractères chinois, des caractères parfois tronqués apparaissent, comme le montre la figure ci-dessous :

Comme le montre la figure ci-dessus, les paramètres de la requête reçue contiennent des caractères chinois. , mais sont convertis en charabia. Ce n’est évidemment pas le résultat que nous souhaitons, alors où est le problème ?

Analyse des problèmes

Tout d'abord, nous devons comprendre le principe selon lequel Node.js reçoit les paramètres de requête.

Node.js est une plateforme haute performance basée sur des modèles d'E/S événementiels et non bloquants. Elle écoute le port réseau, déclenche un événement et encapsule la requête dans un objet de requête. . L'objet de requête contient les en-têtes de requête, le corps de la requête et d'autres informations. Lors de la réception du corps de la requête, Node.js utilise par défaut le codage UTF-8 pour le décodage.

Ainsi, si le corps de la requête que nous recevons contient des caractères chinois et que le Content-Type dans l'en-tête de la requête ne définit pas l'encodage du jeu de caractères, UTF-8 sera utilisé pour le décodage par défaut si l'encodage du jeu de caractères est défini dans. l'en-tête de la requête, puis un jeu de caractères spécifique sera utilisé pour le décodage. Cependant, si le codage du jeu de caractères n'est pas défini dans l'en-tête de la demande et que le corps de la demande contient plusieurs codages de jeux de caractères ou des caractères tronqués, Node.js peut provoquer des caractères tronqués lors du décodage.

Solution

Pour le problème des caractères chinois tronqués reçus par Node.js, nous pouvons partir des aspects suivants :

  1. Encodage uniforme du jeu de caractères

Afin d'éviter le problème de l'encodage du jeu de caractères incohérent, nous pouvons Définissez un codage de jeu de caractères unifié dans l’en-tête de la demande.

Par exemple, nous pouvons définir dans l'en-tête de la requête :

Content-Type: application/x-www-form-urlencoded;charset=utf-8
Copier après la connexion

De cette façon, lors de la réception d'un corps de requête contenant des caractères chinois dans Node.js, il peut être décodé uniformément en utilisant l'encodage UTF-8.

  1. Forcer l'encodage du jeu de caractères

En plus de définir l'encodage du jeu de caractères dans l'en-tête de la requête, nous pouvons également forcer le décodage du jeu de caractères.

Par exemple, lors de l'utilisation du framework express, nous pouvons utiliser le middleware body-parser et spécifier le codage du jeu de caractères pour le décodage. L'exemple est le suivant :

const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.urlencoded({ extended: false, limit: '50mb', parameterLimit: 10000, type: 'application/x-www-form-urlencoded', verify: (req, res, buf) => { req.raw = buf } }))
Copier après la connexion
  1. Utilisez le module iconv-lite pour décoder

Une autre méthode consiste à utiliser le module iconv-lite pour décoder, l'exemple de code est le suivant :

const iconv = require('iconv-lite')
const buffer = Buffer.from('e4b8ade69687', 'hex')
const str = iconv.decode(buffer, 'utf8')
console.log(str) // 输出:"中文"
Copier après la connexion
  1. Utilisez le codage de texte module à décoder

Le dernier La solution est d'utiliser le module d'encodage de texte pour le décodage.

Par exemple, lorsque nous utilisons le framework express, nous pouvons utiliser un décodeur d'encodage de texte pour notre analyseur de corps de requête et le définir sur utf-8. Un exemple est le suivant :

const express = require('express')
const bodyParser = require('body-parser')
const { TextDecoder } = require('text-encoding')

const app = express()
app.use(bodyParser.json({ verify: function(req, res, buf) { req.body = JSON.parse(new TextDecoder('utf-8').decode(buf)) }}))
Copier après la connexion

Résumé

Cet article présente le problème de code tronqué qui peut survenir lorsque Node.js reçoit des requêtes contenant des caractères chinois, ainsi que plusieurs méthodes pour résoudre ce problème.

Dans le développement Node.js, il est très important de gérer correctement le problème des caractères chinois tronqués. Pour résoudre ce problème, nous pouvons utiliser un codage de jeu de caractères unifié, spécifier de force un codage de jeu de caractères, utiliser le module iconv-lite pour décoder et utiliser le module de codage de texte pour décoder, etc., afin d'éviter les caractères tronqués et de garantir le fonctionnement normal de l'application. J'espère que cet article pourra aider les développeurs à résoudre ce problème.

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!

source:php.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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!