インターネットの発展に伴い、多くの開発者がバックエンド開発に Node.js を使用し始めています。ただし、一部の開発者は、Node.js を使用して中国語の文字を受信するときに、中国語の文字化けの問題に遭遇することがあります。この質問は混乱を招くと同時に難しいものです。この記事では、Node.js が受け取る中国語の文字化けの問題を紹介し、いくつかの解決策を提供します。
問題の説明
Node.js を使用して中国語の文字を含むリクエストを受信すると、次の図に示すように文字化けが発生することがあります。
#上図のように、受信したリクエストパラメータに漢字が含まれていますが、文字化けしてしまいます。これは明らかに私たちが望んでいる結果ではありませんが、問題はどこにあるのでしょうか?問題分析
まず、Node.js がリクエスト パラメーターを受け取る原理を理解する必要があります。
Node.js は、イベント駆動型のノンブロッキング I/O モデルに基づいた高性能プラットフォームです。ネットワーク ポートをリッスンします。リクエストを受信すると、イベントをトリガーし、リクエストをカプセル化します。リクエストオブジェクトに入れます。リクエスト オブジェクトには、リクエスト ヘッダー、リクエスト本文、およびその他の情報が含まれます。リクエスト本文を受信するとき、Node.js はデフォルトで UTF-8 エンコードを使用してデコードします。
したがって、受信したリクエスト本文に中国語の文字が含まれており、リクエスト ヘッダーの Content-Type で文字セット エンコーディングが設定されていない場合、デフォルトで UTF-8 がデコードに使用されます。リクエストヘッダーでエンコーディングを設定すると、デコードに特定の文字セットが使用されます。ただし、リクエストヘッダーに文字セットエンコーディングが設定されておらず、リクエストボディに複数の文字セットエンコーディングや文字化けが含まれている場合、Node.js ではデコード時に文字化けが発生する可能性があります。
解決策
Node.jsが受け取る中国語文字化けの問題については、次の側面から始めることができます:
統一文字セットエンコーディング
Content-Type: application/x-www-form-urlencoded;charset=utf-8
このように、Node.js で中国語の文字を含むリクエスト本文を受信した場合、UTF を使用して均一にデコードできます。 8 エンコーディング。
文字セット エンコーディングを強制的に指定する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 } }))
const iconv = require('iconv-lite') const buffer = Buffer.from('e4b8ade69687', 'hex') const str = iconv.decode(buffer, 'utf8') console.log(str) // 输出:"中文"
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)) }}))
概要
この記事では、Node.js が漢字を含むリクエストを受信したときに発生する可能性のある文字化けの問題と、この問題を解決するためのいくつかの方法を紹介します。
Node.js 開発では、中国語の文字化けの問題に正しく対処することが非常に重要です。この問題を解決するには、統一文字セット エンコーディングを使用する、文字セット エンコーディングを強制的に指定する、iconv-lite モジュールを使用してデコードする、text-encoding モジュールを使用してデコードするなど、文字化けを回避し、確実に文字化けを行うことができます。アプリケーションの通常の動作。この記事が開発者によるこの問題の解決に役立つことを願っています。
以上がNodejs が受信した文字化けした中国語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。