Maison  >  Article  >  interface Web  >  conversion du jeu de caractères nodejs

conversion du jeu de caractères nodejs

WBOY
WBOYoriginal
2023-05-13 17:31:381305parcourir

Node.js est un environnement d'exécution JavaScript côté serveur très populaire Lors de l'écriture d'applications Node.js, la conversion du jeu de caractères est inévitablement requise. Lorsqu'il s'agit de systèmes chinois, japonais, coréens et autres, une conversion des jeux de caractères est nécessaire, ce qui nous permet de traiter correctement le texte dans différents formats d'encodage.

Dans cet article, nous présenterons la conversion des jeux de caractères dans Node.js et comment utiliser la bibliothèque iconv pour la conversion d'encodage.

1. Présentation des jeux de caractères

Dans les ordinateurs, un jeu de caractères est un schéma qui mappe les caractères à des codes numériques. Dans les applications pratiques, nous utilisons généralement des codages de caractères tels que ASCII, Unicode et UTF-8.

ASCII (American Standard Code for Information Interchange, American Standard Code for Information Interchange) est l'un des premiers codages de caractères. Il ne prend en charge que l'anglais, les chiffres et un petit nombre de caractères spéciaux. Le codage ASCII comporte un total de 128 caractères, représentés par 7 bits binaires, le bit le plus élevé étant 0. Le codage ASCII a ensuite été étendu pour prendre en charge davantage de jeux de caractères, tels que les séries Latin-1, ISO-8859, etc.

Unicode est un système de codage de caractères unifié à l'échelle mondiale qui inclut tous les caractères de différentes langues à travers le monde et leur attribue des codes uniques. Le codage Unicode comporte un total de 1 114 112 caractères, dont les caractères compris entre 0x0000 et 0xFFFF correspondent à un codage sur 16 bits, appelés caractères BMP (Basic Multilingual Plane) et les caractères compris entre 0x010000 et 0x10FFFF correspondent à un codage sur 32 bits, appelés caractères BMP (Basic Multilingual Plane). Caractères plats auxiliaires. Le codage Unicode dispose de plusieurs méthodes de représentation, telles que UTF-8, UTF-16, etc.

UTF-8 (Unicode Transformation Format-8, Unicode Transformation Format 8-bit) est un codage Unicode de longueur variable qui peut utiliser 1 à 4 octets pour représenter un caractère. Il prend en charge tous les caractères Unicode. Dans le codage UTF-8, les caractères ASCII sont toujours représentés par un octet, tandis que les caractères non-ASCII tels que les caractères chinois sont représentés par 2 à 3 octets. Par conséquent, il est compatible avec le codage ASCII et peut également enregistrer des caractères dans différentes langues.

2. Conversion du jeu de caractères Node.js

Node.js fournit nativement la classe Buffer, qui peut stocker des données binaires en mémoire et est généralement utilisée dans des scénarios tels que la transmission réseau et la lecture et l'écriture de fichiers. Lorsque nous lisons des données binaires à partir de ressources externes, nous devons décoder le jeu de caractères et convertir les données binaires en une chaîne lisible ; lorsque nous convertissons la chaîne en données binaires, nous devons la coder et convertir les caractères en données binaires.

Node.js fournit des modules de conversion de jeux de caractères intégrés, tels que buffer.toString(), Buffer.from(), etc., qui peuvent effectuer une conversion de codage partielle des données binaires. Par exemple :

const buf = Buffer.from('中文');
console.log(buf.toString('utf8')); // 中文
console.log(buf.toString('ascii')); // ��w�
console.log(buf.toString('base64')); // 5Lit5paH

Dans l'exemple ci-dessus, nous convertissons une chaîne « Chinois » en un objet Buffer et utilisons la méthode toString() pour la convertir vers d'autres formats d'encodage. Le résultat du codage utf8 est correct, mais les résultats du codage ascii et base64 sont incorrects.

Node.js utilise le codage utf8 par défaut pour la conversion de chaînes. Si le jeu de caractères à convertir est incompatible avec utf8, vous devez utiliser une bibliothèque tierce telle que iconv pour la conversion du jeu de caractères.

3. Utilisez la bibliothèque iconv pour la conversion des jeux de caractères

iconv est une bibliothèque C open source gratuite pour la conversion entre différents jeux de caractères. Il existe un module NPM appelé iconv-lite dans Node.js, qui est un package de la bibliothèque iconv et fournit des fonctions de conversion de jeu de caractères hautes performances.

Ensuite, nous présenterons comment utiliser iconv-lite pour la conversion du jeu de caractères.

1. Installez iconv-lite

Tout d'abord, nous devons installer iconv-lite.

npm install iconv-lite

2. Conversion d'encodage de chaîne

Utiliser iconv-lite pour effectuer la conversion d'encodage est très simple, il suffit d'appeler la méthode correspondante. Par exemple, nous convertissons une chaîne codée GB2312 en codage UTF-8 :

const iconv = require('iconv-lite');
const str = '中文字符串';
const buf = iconv.encode(str, 'gb2312');
const str2 = iconv.decode(buf, 'utf8');
console.log(str2); // 中文字符串

Dans l'exemple ci-dessus, nous utilisons d'abord la méthode iconv.encode pour convertir la chaîne codée GB2312 en un objet Buffer, puis utilisons la méthode iconv.decode Convertissez un objet Buffer en une chaîne codée en UTF-8. La chaîne convertie est une chaîne chinoise correcte.

3. Conversion d'encodage de flux

Lors du traitement de fichiers volumineux, vous devrez peut-être utiliser des flux pour la conversion d'encodage. Ici, nous pouvons utiliser la bibliothèque iconv-lite-stream fournie par iconv-lite pour implémenter facilement la conversion d'encodage de flux. Par exemple, nous convertissons un fichier codé Shift_JIS en codage UTF-8 :

const iconv = require('iconv-lite');
const fs = require('fs');
const iconvStream = iconv.decodeStream('Shift_JIS');
const inputStream = fs.createReadStream('shift-jis-file.txt');
const outputStream = fs.createWriteStream('utf8-file.txt');
inputStream.pipe(iconvStream).pipe(outputStream);

Dans l'exemple ci-dessus, nous créons d'abord un flux lisible qui lit le fichier codé Shift_JIS, puis créons un flux inscriptible qui écrit les fichiers codés UTF-8. Dans le même temps, nous avons créé un flux codé en tant que Shift_JIS via la méthode iconv.decodeStream et l'avons chaîné avec le flux lisible et le flux inscriptible pour obtenir une conversion d'encodage de flux.

4. Résumé

Dans cet article, nous avons présenté la conversion des jeux de caractères dans Node.js et comment utiliser la bibliothèque iconv-lite pour la conversion d'encodage. La conversion des jeux de caractères est une fonction très nécessaire lorsqu'il s'agit de systèmes chinois, japonais, coréens et autres. Une utilisation correcte de la conversion des jeux de caractères peut efficacement éviter des problèmes tels que des caractères tronqués. Nous espérons que cet article aidera les lecteurs à mieux comprendre la conversion des jeux de caractères dans Node.js.

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:
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