>웹 프론트엔드 >프런트엔드 Q&A >nodejs가 수신한 왜곡된 한자

nodejs가 수신한 왜곡된 한자

PHPz
PHPz원래의
2023-05-08 09:33:06860검색

인터넷이 발전하면서 많은 개발자들이 백엔드 개발에 Node.js를 사용하기 시작했습니다. 그러나 일부 개발자는 Node.js를 사용하여 한자를 수신할 때 한자가 왜곡되는 문제에 직면하게 됩니다. 이 질문은 혼란스럽고 어렵습니다. 이 기사에서는 Node.js에서 수신한 한자가 깨져 보이는 문제를 소개하고 몇 가지 해결 방법을 제시합니다.

문제 설명

Node.js를 사용하여 한자가 포함된 요청을 수신할 때 아래 그림과 같이 가끔 잘못된 문자가 나타나는 경우가 있습니다.

위 그림과 같이 수신된 요청 매개변수에 한자가 포함되어 있습니다. , 그러나 횡설수설로 변환됩니다. 이는 분명히 우리가 원하는 결과가 아닌데, 문제는 어디에 있습니까?

문제 분석

우선 Node.js가 요청 매개변수를 받는 원리를 이해해야 합니다.

Node.js는 이벤트 기반 및 비차단 I/O 모델을 기반으로 하는 고성능 플랫폼입니다. 요청이 수신되면 이벤트를 트리거하고 요청을 요청 객체로 캡슐화합니다. . 요청 객체에는 요청 헤더, 요청 본문 및 기타 정보가 포함됩니다. 요청 본문을 수신할 때 Node.js는 기본적으로 디코딩을 위해 UTF-8 인코딩을 사용합니다.

따라서 우리가 받은 요청 본문에 중국어 문자가 포함되어 있고 요청 헤더의 Content-Type이 문자 집합 인코딩을 설정하지 않은 경우 기본적으로 문자 집합 인코딩이 설정된 경우 UTF-8이 디코딩에 사용됩니다. 요청 헤더를 사용하면 특정 문자 집합이 디코딩에 사용됩니다. 그러나 요청 헤더에 문자 집합 인코딩이 설정되어 있지 않고 요청 본문에 여러 문자 집합 인코딩이 포함되어 있거나 문자가 깨졌을 경우 Node.js에서 디코딩할 때 문자가 깨질 수 있습니다.

해결 방법

Node.js에서 수신한 한자 왜곡 문제에 대해 다음 측면에서 시작할 수 있습니다.

  1. 균일한 문자 집합 인코딩

일관되지 않은 문자 집합 인코딩 문제를 피하기 위해 다음과 같은 방법을 사용할 수 있습니다. 요청 헤더에 통합 문자 세트 인코딩을 설정합니다.

예를 들어 요청 헤더에

Content-Type: application/x-www-form-urlencoded;charset=utf-8

를 설정할 수 있습니다. 이렇게 하면 Node.js에서 한자가 포함된 요청 본문을 수신할 때 UTF-8 인코딩을 사용하여 균일하게 디코딩할 수 있습니다.

  1. 문자 집합 인코딩 강제 적용

요청 헤더에서 문자 집합 인코딩을 설정하는 것 외에도 문자 집합 인코딩을 강제로 디코딩할 수도 있습니다.

예를 들어, Express 프레임워크를 사용할 때 body-parser 미들웨어를 사용하고 디코딩을 위한 문자 세트 인코딩을 지정할 수 있습니다. 예는 다음과 같습니다.

const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.urlencoded({ extended: false, limit: '50mb', parameterLimit: 10000, type: 'application/x-www-form-urlencoded', verify: (req, res, buf) => { req.raw = buf } }))
  1. iconv-lite 모듈을 사용하여 디코딩

또 다른 방법은 iconv-lite 모듈을 사용하여 디코딩하는 것입니다. 코드 예는 다음과 같습니다.

const iconv = require('iconv-lite')
const buffer = Buffer.from('e4b8ade69687', 'hex')
const str = iconv.decode(buffer, 'utf8')
console.log(str) // 输出:"中文"
  1. 텍스트 인코딩 사용 모듈을 디코딩

마지막 해결책은 디코딩을 위해 텍스트 인코딩 모듈을 사용하는 것입니다.

예를 들어, Express 프레임워크를 사용할 때 요청 본문 파서에 텍스트 인코딩 디코더를 사용하고 이를 utf-8로 설정할 수 있습니다. 예는 다음과 같습니다.

const express = require('express')
const bodyParser = require('body-parser')
const { TextDecoder } = require('text-encoding')

const app = express()
app.use(bodyParser.json({ verify: function(req, res, buf) { req.body = JSON.parse(new TextDecoder('utf-8').decode(buf)) }}))

Summary

이 글에서는 Node.js가 한자가 포함된 요청을 수신할 때 발생할 수 있는 잘못된 코드 문제와 이 문제를 해결하는 몇 가지 방법을 소개합니다.

Node.js 개발에서는 한자가 깨지는 문제를 올바르게 처리하는 것이 매우 중요합니다. 이 문제를 해결하기 위해 우리는 통합 문자 세트 인코딩을 사용하고, 문자 세트 인코딩을 강제로 지정하고, iconv-lite 모듈을 사용하여 디코딩하고, 텍스트 인코딩 모듈을 사용하여 디코딩하는 등의 작업을 수행하여 문자가 왜곡되는 것을 방지하고 응용 프로그램의 정상적인 작동. 이 기사가 개발자가 이 문제를 해결하는 데 도움이 되기를 바랍니다.

위 내용은 nodejs가 수신한 왜곡된 한자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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