ホームページ > ウェブフロントエンド > フロントエンドQ&A > Nodejsポストの文字化けしたコード

Nodejsポストの文字化けしたコード

王林
リリース: 2023-05-24 09:07:36
オリジナル
636 人が閲覧しました

Node.js を使用して HTTP POST リクエストを行う場合、中国語のパラメーターを渡した後に文字化けが発生することがあります。この記事では、一般的な解決策をいくつか紹介します。

原因分析

Node.js の HTTP POST リクエストを通じて中国語パラメータを送信する場合、エンコードが実行されないと、中国語パラメータは UTF-8 エンコードでサーバーに送信されます。ただし、場合によっては、サーバーが UTF-8 でエンコードされた中国語パラメータを正しく解析できず、文字化けが発生します。通常、この状況には次の理由が考えられます。

  1. サーバーがエンコード形式を正しく設定していません。サーバーがエンコード形式を UTF-8 に正しく設定しない場合、クライアントから送信された UTF-8 でエンコードされた中国語パラメータを正しく解析できず、文字化けが発生します。
  2. クライアントはリクエスト ヘッダーを正しく設定しませんでした。 Node.js を通じて HTTP POST リクエストを行うときは、リクエスト ヘッダーの Content-Type フィールドを application/x-www-form-urlencoded;charset=utf-8 に設定して、リクエスト パラメータが受信されたことをサーバーに伝える必要があります。 UTF-8エンコーディングです。
  3. Node.js モジュールはエンコードを正しく処理しません。 Node.js では、一部のモジュールはデフォルトでエンコード形式を UTF-8 に設定しないため、手動で指定する必要があります。これらのモジュールを使用する際にエンコードを行わないと文字化けが発生します。

解決策

方法 1: サーバー側のエンコード形式を UTF-8 に設定する

サーバー側のエンコード形式を UTF-8 に設定すると、次のようになります。クライアントから送信された UTF-8 でエンコードされた中国語パラメータを正しく解析します。 Express フレームワークでは、次のコードを使用してエンコード形式を UTF-8 に設定できます:

const express = require('express')
const app = express()

app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use(function(req, res, next) {
  res.header('Content-Type', 'text/html; charset=utf-8')
  next()
})
ログイン後にコピー

方法 2: リクエスト ヘッダーを UTF-8 に設定します

リクエストを次のように設定できます。 Node.js ヘッダーの Content-Type フィールドは application/x-www-form-urlencoded;charset=utf-8 で、受信したリクエスト パラメーターが UTF-8 でエンコードされていることをサーバーに伝えます。 axios ライブラリを使用して HTTP POST リクエストを行う場合、リクエスト ヘッダーを次のように設定できます:

const axios = require('axios')

axios.post('/api/posts', {
  title: '中文标题',
  content: '中文内容'
}, {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  }
}).then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})
ログイン後にコピー

方法 3: 手動エンコード処理

デフォルトのエンコードを設定しない一部のノードの場合UTF-8.js モジュールに変換すると、手動でエンコード処理を実行し、中国語パラメータを UTF-8 エンコードに変換できます。エンコード処理にクエリ文字列モジュールを使用する場合は、次のように使用できます。

const querystring = require('querystring')
const https = require('https')

const postData = querystring.stringify({
  title: '中文标题',
  content: '中文内容'
})

const options = {
  hostname: 'www.example.com',
  path: '/api/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
}

const req = https.request(options, res => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(postData)
req.end()
ログイン後にコピー

要約

Node.js HTTP POST リクエストを行うとき、中国語のパラメーターが文字化けすることがよくあります。中国語のパラメータが正しく渡されるようにするには、サーバー側のエンコード形式、リクエスト ヘッダーを正しく設定し、手動でエンコード処理を実行する必要があります。同時に、一部の Node.js モジュールを使用する場合は、エンコード形式がデフォルトで UTF-8 に設定されているかどうかにも注意する必要があります。

以上がNodejsポストの文字化けしたコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート