Apabila menggunakan Node.js untuk membuat permintaan HTTP POST, kadangkala aksara bercelaru muncul selepas melepasi parameter Cina. Artikel ini akan berkongsi beberapa penyelesaian biasa.
Apabila kami menyerahkan parameter Cina melalui permintaan HTTP POST dalam Node.js, jika tiada pengekodan dilakukan, parameter Cina akan dihantar ke pelayan dalam pengekodan UTF-8. Walau bagaimanapun, dalam beberapa kes, pelayan tidak dapat menghuraikan parameter Cina yang dikodkan UTF-8 dengan betul, mengakibatkan aksara bercelaru. Keadaan ini biasanya mempunyai sebab berikut:
Kami boleh menetapkan format pengekodan bahagian pelayan kepada UTF-8 kepada Parse dengan betul parameter Cina yang dikodkan UTF-8 yang dihantar daripada klien. Dalam rangka kerja Express, kami boleh menetapkan format pengekodan kepada UTF-8 melalui kod berikut:
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() })
Kami boleh menetapkan permintaan dalam Node.js Medan Jenis Kandungan dalam pengepala ialah application/x-www-form-urlencoded;charset=utf-8 untuk memberitahu pelayan bahawa parameter permintaan yang diterima adalah dikodkan UTF-8. Apabila menggunakan perpustakaan axios untuk membuat permintaan HTTP POST, kita boleh menetapkan pengepala permintaan seperti ini:
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) })
Untuk sesetengah Nod yang tidak menetapkan pengekodan lalai kepada modul UTF-8. js, kami boleh melakukan pemprosesan pengekodan secara manual dan menukar parameter Cina kepada pengekodan UTF-8. Apabila menggunakan modul rentetan pertanyaan untuk pemprosesan pengekodan, kita boleh menggunakannya seperti ini:
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()
Apabila membuat permintaan HTTP POST Node.js, adalah perkara biasa untuk parameter Cina kelihatan bercelaru. Kami perlu menetapkan format pengekodan sebelah pelayan dengan betul, pengepala permintaan dan melakukan pemprosesan pengekodan secara manual untuk memastikan parameter Cina boleh dihantar dengan betul. Pada masa yang sama, apabila menggunakan beberapa modul Node.js, kita juga perlu memberi perhatian sama ada format pengekodan telah ditetapkan kepada UTF-8 secara lalai.
Atas ialah kandungan terperinci nodejs menyiarkan kod bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!