ホームページ >ウェブフロントエンド >フロントエンドQ&A >Nodejs が受信した文字化けした中国語

Nodejs が受信した文字化けした中国語

PHPz
PHPzオリジナル
2023-05-08 09:33:06859ブラウズ

インターネットの発展に伴い、多くの開発者がバックエンド開発に 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が受け取る中国語文字化けの問題については、次の側面から始めることができます:

統一文字セットエンコーディング

    一貫性のない文字セット エンコーディングの問題を回避するために、リクエスト ヘッダーで統一された文字セット エンコーディングを設定できます。
  1. たとえば、リクエスト ヘッダーに次のように設定できます。
Content-Type: application/x-www-form-urlencoded;charset=utf-8

このように、Node.js で中国語の文字を含むリクエスト本文を受信した場合、UTF を使用して均一にデコードできます。 8 エンコーディング。

文字セット エンコーディングを強制的に指定する

    リクエスト ヘッダーで文字セット エンコーディングを設定することに加えて、文字セット エンコーディングを強制的に指定することもできます。デコード用。
  1. たとえば、Express フレームワークを使用する場合、ボディパーサー ミドルウェアを使用して、デコード用の文字セット エンコーディングを指定できます。例は次のとおりです。
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 } }))

iconv-lite モジュールを使用してデコードする

    もう 1 つの方法は、iconv-lite モジュールを使用してデコードすることです。コード例は次のとおりです。次のように:
  1. const iconv = require('iconv-lite')
    const buffer = Buffer.from('e4b8ade69687', 'hex')
    const str = iconv.decode(buffer, 'utf8')
    console.log(str) // 输出:"中文"
デコードにテキスト エンコード モジュールを使用する

    最後の解決策は、デコードにテキスト エンコード モジュールを使用することです。
  1. たとえば、Express フレームワークを使用する場合、リクエスト本文パーサーにテキスト エンコーディング デコーダーを使用し、それを utf-8 に設定できます。例は次のとおりです。
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 サイトの他の関連記事を参照してください。

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