>웹 프론트엔드 >프런트엔드 Q&A >nodejs 게시 중국어 잘못된 코드

nodejs 게시 중국어 잘못된 코드

WBOY
WBOY원래의
2023-05-11 12:23:36595검색

Node.js는 웹 개발에 널리 사용되는 인기 있는 서버 측 JavaScript 엔진입니다. 그러나 POST 요청을 처리할 때 중국어 문자가 깨져서 나타나는 경우가 많아 일련의 문제가 발생할 수 있습니다.

문제의 원인은 HTTP 프로토콜에서 POST 요청의 데이터 엔터티 부분이 Content-Type 헤더에 지정된 인코딩 방법을 통해 인코딩되기 때문입니다. 요청을 보내는 클라이언트와 요청을 받는 서버가 서로 다른 인코딩 방법을 사용하면 중국어 문자가 깨질 수 있습니다.

그래서 이 문제를 해결하는 열쇠는 데이터를 요청할 때와 데이터를 받을 때 동일한 인코딩이 사용되는지 확인하는 것입니다. 다음은 몇 가지 해결 방법입니다.

  1. 요청 인코딩 방법 지정

POST 요청을 보낼 때 Content-Type 헤더를 설정하여 요청 데이터의 인코딩 방법을 지정할 수 있습니다. 요청에 중국어 문자가 포함된 경우 Content-Type 헤더를 application/x-www-form-urlencoded;charset=utf-8로 설정할 수 있습니다. 즉, UTF-8 인코딩을 사용하여 인코딩할 수 있습니다.

const data = new URLSearchParams();
data.append('username', '张三');
data.append('password', '123456');
fetch('/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  },
  body: data
});
  1. 응답 지정 인코딩 방법

POST 요청을 받을 때 Content-Type 헤더를 설정하여 응답 데이터의 인코딩 방법을 지정할 수 있습니다. 마찬가지로 응답에 중국어 문자가 포함된 경우 Content-Type 헤더를 text/html;charset=utf-8로 설정할 수 있습니다. 즉, UTF-8 인코딩을 사용하여 인코딩할 수 있습니다.

app.post('/login', (req, res) => {
  res.setHeader('Content-Type', 'text/html;charset=utf-8');
  res.send('<p>登录成功</p>');
});
  1. 미들웨어를 사용하여 인코딩 처리

미들웨어를 사용하여 POST 요청 인코딩을 처리할 수 있습니다. body-parser 미들웨어는 요청 데이터의 인코딩을 자동으로 처리하여 요청에서 데이터를 주고받을 때 동일한 인코딩이 사용되도록 보장하는 일반적인 솔루션입니다.

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  console.log(username, password);
  res.send('<p>登录成功</p>');
});

이 예에서는 body-parser 미들웨어가 애플리케이션에 추가되었습니다. , 이를 사용하여 POST 요청의 인코딩을 처리합니다.

일반적으로 POST 요청의 중국어 왜곡 문제를 처리하려면 요청과 응답의 인코딩이 일치하는지 확인하고 미들웨어를 올바르게 사용하여 인코딩 문제를 처리해야 합니다. 이러한 솔루션을 사용하면 POST 요청을 처리할 때 응용 프로그램에 중국어 왜곡 문제가 발생하지 않도록 하여 사용자와 서버 간의 통신을 더 잘 처리할 수 있습니다.

위 내용은 nodejs 게시 중국어 잘못된 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.