ホームページ > 記事 > ウェブフロントエンド > Nodejsポストの文字化けしたコード
Node.js を使用して HTTP POST リクエストを行う場合、中国語のパラメーターを渡した後に文字化けが発生することがあります。この記事では、一般的な解決策をいくつか紹介します。
Node.js の HTTP POST リクエストを通じて中国語パラメータを送信する場合、エンコードが実行されないと、中国語パラメータは UTF-8 エンコードでサーバーに送信されます。ただし、場合によっては、サーバーが 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() })
リクエストを次のように設定できます。 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) })
デフォルトのエンコードを設定しない一部のノードの場合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 サイトの他の関連記事を参照してください。