ホームページ  >  記事  >  ウェブフロントエンド  >  nodejsの文字セット変換

nodejsの文字セット変換

WBOY
WBOYオリジナル
2023-05-13 17:31:381255ブラウズ

Node.js は非常に人気のあるサーバーサイド JavaScript 実行環境ですが、Node.js アプリケーションを作成する場合、必然的に文字セットの変換が必要になります。中国語、日本語、韓国語、その他のシステムを扱う場合は、文字セットの変換が必要です。これにより、さまざまなエンコード形式のテキストを正しく処理できるようになります。

この記事では、Node.js での文字セット変換と、エンコード変換に iconv ライブラリを使用する方法を紹介します。

1. 文字セットの概要

コンピュータにおいて、文字セットは文字を数値コードにマッピングするスキームです。実際のアプリケーションでは、通常、ASCII、Unicode、UTF-8 などの文字エンコーディングを使用します。

ASCII (American Standard Code for Information Interchange、American Standard Code for Information Interchange) は、最も初期の文字エンコーディングの 1 つで、英語、数字、および少数の特殊文字のみをサポートします。 ASCII エンコードには合計 128 文字があり、7 バイナリ ビットで表され、最上位ビットは 0 です。 ASCII エンコーディングは後に拡張され、Latin-1、ISO-8859 シリーズなど、より多くの文字セットをサポートするようになりました。

Unicode は、世界中のさまざまな言語のすべての文字を含み、それらに固有のコードを割り当てる、世界的に統一された文字エンコーディング スキームです。 Unicode エンコードには合計 1,114,112 文字があり、そのうち 0x0000 から 0xFFFF までの文字は Basic Multilingual Plane (BMP) 文字と呼ばれる 16 ビット エンコードに対応し、0x010000 から 0x10FFFF までの文字は 32 ビット エンコードと呼ばれる 32 ビット エンコードに対応します。補助フラット文字。 Unicode エンコードには、UTF-8、UTF-16 などの複数の表現方法があります。

UTF-8 (Unicode Transformation Format-8、Unicode Transformation Format 8-bit) は、1 ~ 4 バイトを使用して文字を表すことができる可変長 Unicode エンコードであり、すべての Unicode 文字をサポートします。 UTF-8 エンコードでも、ASCII 文字は 1 バイトで表現されますが、漢字などの非 ASCII 文字は 2 ~ 3 バイトで表現されるため、ASCII エンコードと互換性があり、さまざまな言語の文字を保存することもできます。

2. Node.js 文字セット変換

Node.js は、バイナリ データをメモリに保存できる Buffer クラスをネイティブに提供し、通常、ネットワーク送信やファイル読み取りなどのシナリオで使用されます。書き込み。外部リソースからバイナリ データを読み取る場合は、文字セットをデコードしてバイナリ データを読み取り可能な文字列に変換する必要があり、文字列をバイナリ データに変換する場合は、エンコードして文字を変換する必要があります。

Node.js は、バイナリ データの部分的なエンコード変換を実行できる、buffer.toString()、Buffer.from() などのいくつかの組み込み文字セット変換モジュールを提供します。例:

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

上記の例では、文字列「中国語」を Buffer オブジェクトに変換し、toString() メソッドを使用して他のエンコード形式に変換します。 utf8 エンコード結果は正しいですが、ASCII エンコードおよび Base64 エンコード結果は正しくありません。

Node.js では、文字列変換にデフォルトで utf8 エンコーディングが使用されます。変換する文字セットが utf8 と互換性がない場合は、文字セット変換に iconv などのサードパーティ ライブラリを使用する必要があります。

3. 文字セット変換に iconv ライブラリを使用する

iconv は、異なる文字セット間の変換に使用される無料のオープン ソース C ライブラリです。 Node.js には iconv-lite という NPM モジュールがあり、iconv ライブラリのパッケージであり、高パフォーマンスの文字セット変換機能を提供します。

次にiconv-liteを使って文字セット変換を行う方法を紹介します。

1. iconv-lite のインストール

まず、iconv-lite をインストールする必要があります。

npm install iconv-lite

2. 文字列エンコード変換

iconv-lite を使用してエンコード変換を実行するのは非常に簡単で、対応するメソッドを呼び出すだけです。たとえば、GB2312 でエンコードされた文字列を UTF-8 エンコードに変換します。

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

上の例では、まず iconv.encode メソッドを使用して GB2312 でエンコードされた文字列を Buffer オブジェクトに変換します。 use iconv.decode メソッドは、Buffer オブジェクトを UTF-8 でエンコードされた文字列に変換します。変換された文字列は正しい中国語の文字列です。

3. ストリーム エンコード変換

大きなファイルを処理する場合、エンコード変換にストリームを使用する必要がある場合があります。ここでは、iconv-lite が提供する iconv-lite-stream ライブラリを使用して、ストリーム エンコード変換を簡単に実装できます。たとえば、Shift_JIS エンコードされたファイルを 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);

上の例では、まず読み取り可能なストリームを作成し、Shift_JIS エンコードされたファイルを読み取り、次に書き込み可能なストリームを作成し、UTF を書き込みます。 -8 でエンコードされたファイル。同時に、iconv.decodeStream メソッドによって Shift_JIS でエンコードされたストリームを作成し、読み取り可能なストリームと書き込み可能なストリームと連鎖させて、ストリームのエンコード変換を実現しました。

4. 概要

この記事では、Node.js での文字セット変換と、エンコード変換に iconv-lite ライブラリを使用する方法を紹介しました。文字セット変換は、中国語、日本語、韓国語などのシステムを扱う場合に非常に必要な機能であり、文字セット変換を正しく使用することで、文字化けなどの問題を効果的に回避できます。この記事が、読者が Node.js における文字セット変換をより深く理解するのに役立つことを願っています。

以上がnodejsの文字セット変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。