Heim  >  Artikel  >  Web-Frontend  >  nodejs postet verstümmelten Code

nodejs postet verstümmelten Code

王林
王林Original
2023-05-24 09:07:36580Durchsuche

Bei der Verwendung von Node.js zum Senden von HTTP-POST-Anfragen werden nach der Übergabe chinesischer Parameter manchmal verstümmelte Zeichen angezeigt. In diesem Artikel werden einige gängige Lösungen vorgestellt.

Ursachenanalyse

Wenn wir chinesische Parameter über eine HTTP-POST-Anfrage in Node.js übermitteln und keine Kodierung durchgeführt wird, werden die chinesischen Parameter in UTF-8-Kodierung an den Server gesendet. In einigen Fällen kann der Server jedoch UTF-8-codierte chinesische Parameter nicht korrekt analysieren, was zu verstümmelten Zeichen führt. Diese Situation hat normalerweise folgende Gründe:

  1. Das Kodierungsformat ist serverseitig nicht richtig eingestellt. Wenn der Server das Codierungsformat nicht korrekt auf UTF-8 einstellt, kann er die vom Client gesendeten UTF-8-codierten chinesischen Parameter nicht korrekt analysieren, was zu verstümmelten Zeichen führt.
  2. Der Client hat den Anforderungsheader nicht richtig festgelegt. Wenn wir eine HTTP-POST-Anfrage über Node.js stellen, müssen wir das Feld „Content-Type“ im Anforderungsheader auf „application/x-www-form-urlencoded;charset=utf-8“ setzen, um dem Server mitzuteilen, dass die Anforderungsparameter empfangen wurden sind UTF-8-Kodierung.
  3. Node.js-Modul verarbeitet die Codierung nicht richtig. In Node.js stellen einige Module das Codierungsformat nicht standardmäßig auf UTF-8 ein und müssen manuell angegeben werden. Wenn diese Module ohne Kodierung verwendet werden, treten verstümmelte Zeichen auf.

Lösung

Methode 1: Stellen Sie das serverseitige Kodierungsformat auf UTF-8 ein

Wir können das serverseitige Kodierungsformat auf UTF-8 einstellen, um die vom Client gesendeten UTF-8-kodierten chinesischen Parameter korrekt zu analysieren. Im Express-Framework können wir das Codierungsformat über den folgenden Code auf UTF-8 festlegen:

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()
})

Methode 2: Setzen Sie den Anforderungsheader auf UTF-8

Wir können das Feld „Content-Type“ im Anforderungsheader auf „sein“ festlegen in Node.js application/x-www-form-urlencoded;charset=utf-8, um dem Server mitzuteilen, dass die empfangenen Anforderungsparameter UTF-8-codiert sind. Wenn wir die Axios-Bibliothek verwenden, um eine HTTP-POST-Anfrage zu stellen, können wir den Anforderungsheader wie folgt festlegen:

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)
})

Methode 3: Manuelle Kodierung

Für einige Node.js-Module, die die Standardkodierung nicht auf UTF-8 setzen, haben wir kann den Prozess manuell kodieren und chinesische Parameter in UTF-8-Kodierung konvertieren. Wenn wir das Querystring-Modul für die Codierungsverarbeitung verwenden, können wir es wie folgt verwenden:

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()

Zusammenfassung

Beim Erstellen einer Node.js-HTTP-POST-Anfrage kommt es häufig vor, dass chinesische Parameter verstümmelt werden. Wir müssen das serverseitige Codierungsformat, die Anforderungsheader und die manuelle Codierungsverarbeitung korrekt festlegen, um sicherzustellen, dass chinesische Parameter korrekt übergeben werden können. Gleichzeitig müssen wir bei der Verwendung einiger Node.js-Module auch darauf achten, ob das Codierungsformat standardmäßig auf UTF-8 eingestellt ist.

Das obige ist der detaillierte Inhalt vonnodejs postet verstümmelten Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn