在使用 Node.js 進行 HTTP POST 請求時,有時候會遇到中文參數傳遞後出現亂碼的情況。本文將分享一些常見的解決方法。
原因分析
當我們在 Node.js 中透過 HTTP POST 請求提交中文參數時,如果不進行編碼處理,那麼中文參數會以 UTF-8 編碼傳送到伺服器端。但有些情況下,伺服器端無法正確解析 UTF-8 編碼的中文參數,導致亂碼出現。這種情況通常有以下幾種原因:
- 伺服器端未正確設定編碼格式。如果伺服器端未正確設定編碼格式為 UTF-8,則無法正確解析從客戶端傳送過來的 UTF-8 編碼的中文參數,導致亂碼。
- 客戶端未正確設定請求頭。當我們透過Node.js 進行HTTP POST 請求時,需要設定請求頭中的Content-Type 欄位為application/x-www-form-urlencoded;charset=utf-8,以告訴伺服器端接收的請求參數為UTF- 8 編碼。
- Node.js 模組未正確處理編碼。在 Node.js 中,有些模組並未預設設定編碼格式為 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() })
方法二:設定請求頭為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) })
方法三:手動進行編碼處理
對於一些未設定預設編碼為UTF-8 的Node. js 模組,我們可以手動進行編碼處理,將中文參數轉換為UTF-8 編碼。在使用 querystring 模組進行編碼處理時,我們可以這樣使用:
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 post 亂碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了React中的使用效應,這是一種用於管理副作用的鉤子,例如數據獲取和功能組件中的DOM操縱。它解釋了用法,常見的副作用和清理,以防止記憶洩漏等問題。

JavaScript中的高階功能通過抽象,常見模式和優化技術增強代碼簡潔性,可重複性,模塊化和性能。

本文討論了JavaScript中的咖哩,這是一種將多重題材函數轉換為單詞彙函數序列的技術。它探討了咖哩的實施,諸如部分應用和實際用途之類的好處,增強代碼閱讀

文章討論了使用DestrestDefault()方法在事件處理程序中預防默認行為,其好處(例如增強的用戶體驗)以及諸如可訪問性問題之類的潛在問題。

本文解釋了React中的UseContext,該文章通過避免道具鑽探簡化了狀態管理。它討論了通過減少的重新租賃者進行集中國家和績效改善之類的好處。

本文討論了React中受控和不受控制的組件的優勢和缺點,重點是可預測性,性能和用例等方面。它建議在選擇之間選擇因素。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版