nodejs는 여전히 왜곡되어 있습니다

WBOY
풀어 주다: 2023-05-13 19:05:35
원래의
553명이 탐색했습니다.

Node.js는 매우 인기 있는 서버 측 JavaScript 런타임 환경으로, 가볍고 효율적이며 확장이 쉽다는 장점이 있지만 웹 애플리케이션, 명령줄 도구, 사물 인터넷 및 기타 분야에서 널리 사용됩니다. 어떤 경우에는 문자가 깨지는 등의 문제가 여전히 발생할 수 있습니다. 이 기사에서는 Node.js 왜곡 문제의 원인과 해결 방법을 살펴보겠습니다.

1. 코드 왜곡 문제의 원인

  1. 일관되지 않은 문자 인코딩

Node.js에서 JavaScript 문자열은 기본적으로 UTF-8 인코딩을 사용하지만, 파일 읽기, 네트워크 요청 등의 경우에는 작업, 반환 문자열이 반드시 UTF-8로 인코딩될 필요는 없습니다. 프로그램이 이 상황을 올바르게 처리하지 않으면 잘못된 문자가 쉽게 발생할 수 있습니다.

예를 들어 GBK로 인코딩된 텍스트 파일을 읽을 때 인코딩 형식을 지정하지 않으면 쉽게 잘못된 코드 문제에 직면하게 됩니다.

const fs = require('fs'); fs.readFile('file.txt', (err, data) => { if (err) throw err; console.log(data.toString()); // 输出乱码 })
로그인 후 복사

해결책은 파일을 읽을 때 올바른 인코딩 형식을 지정하는 것입니다. as:

const fs = require('fs'); fs.readFile('file.txt', { encoding: 'GBK' }, (err, data) => { if (err) throw err; console.log(data.toString()); // 输出正确的文本 })
로그인 후 복사
  1. 응답 헤더가 문자 집합을 지정하지 않습니다

Node.js 서버에서 클라이언트가 요청을 시작하고 응답을 받을 때 응답 내용의 문자 인코딩을 응답에 지정해야 합니다. 머리글. 응답 헤더에 문자 세트가 지정되지 않거나 지정된 문자 세트가 실제 사용된 문자 세트와 일치하지 않으면 문자가 깨져 발생합니다.

예를 들어, HTTP 서버를 생성하기 위해 Express 프레임워크를 사용합니다. 반환된 HTML 텍스트가 인코딩을 지정하지 않으면 잘못된 문자가 발생하기 쉽습니다.

const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('中文'); // 输出乱码 }); app.listen(8080, () => { console.log('Server started on http://localhost:8080/'); });
로그인 후 복사

해결책은 응답의 문자 집합을 명확하게 지정하는 것입니다.

const express = require('express'); const app = express(); app.get('/', (req, res) => { res.set('Content-Type', 'text/html; charset=utf8'); res.send('中文'); // 输出正确的文本 }); app.listen(8080, () => { console.log('Server started on http://localhost:8080/'); });
로그인 후 복사
  1. 일관되지 않은 데이터베이스 인코딩

Node.js에서 데이터베이스와 상호작용할 때 데이터베이스 인코딩이 Node.js 문자 인코딩과 일치하지 않는 경우가 있습니다. 예를 들어, MySQL 데이터베이스에서 일반적으로 사용되는 문자 인코딩은 latin1과 utf8인 반면, Node.js의 기본 인코딩은 utf8입니다. 쿼리할 때 인코딩을 지정하지 않으면 문자가 깨질 수 있습니다.

예를 들어, MySQL 데이터베이스를 쿼리하기 위해 mysql 모듈을 사용합니다. 인코딩이 지정되지 않은 경우 잘못된 코드 문제가 발생하기 쉽습니다.

const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; console.log(results); // 输出乱码 }); connection.end();
로그인 후 복사

해결책은 쿼리할 때 올바른 인코딩 형식을 지정하는 것입니다. :

const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); connection.query('SELECT * FROM users', { charset: 'GBK' }, (error, results, fields) => { if (error) throw error; console.log(results); // 输出正确的文本 }); connection.end();
로그인 후 복사

2. 잘못된 코드 문제 해결책

  1. Buffer 사용

Node.js에서는 Buffer 클래스를 사용하여 문자 집합 변환을 비롯한 바이너리 데이터를 처리할 수 있습니다. 문자열을 지정된 인코딩을 사용하여 이진 데이터로 변환하려면 Buffer.from() 메서드를 사용하고, 이진 데이터를 지정된 인코딩을 사용하여 문자열로 변환하려면 buf.toString() 메서드를 사용합니다.

예를 들어 GBK로 인코딩된 텍스트 파일을 읽을 때 Buffer 클래스를 사용하여 잘못된 문제를 처리할 수 있습니다.

const fs = require('fs'); fs.readFile('file.txt', (err, data) => { if (err) throw err; const buf = Buffer.from(data, 'binary'); console.log(buf.toString('GBK')); // 输出正确的文本 })
로그인 후 복사
  1. 문자 인코딩 지정

Node.js에서는 많은 API가 문자 지정을 위한 매개변수를 제공합니다. 예를 들어, 파일을 읽을 때 { 인코딩: 'GBK' }, 응답 헤더에 charset=utf8, 데이터베이스를 쿼리할 때 { charset: 'GBK' } 등이 있습니다. 이러한 매개변수를 올바르게 사용하면 문자가 왜곡되는 것을 방지할 수 있습니다.

예를 들어 Express 프레임워크를 사용하여 HTTP 서버를 만들 때 응답 헤더에 인코딩을 지정할 수 있습니다.

const express = require('express'); const app = express(); app.get('/', (req, res) => { res.set('Content-Type', 'text/html; charset=utf8'); res.send('中文'); }); app.listen(8080, () => { console.log('Server started on http://localhost:8080/'); });
로그인 후 복사
  1. 문자 인코딩 통합

Node.js 서버에서 문자 인코딩을 통합하면 또한 왜곡된 문자를 피하십시오. 모든 문자열의 인코딩 형식을 UTF-8로 설정할 수 있습니다. 이렇게 하면 일관되지 않은 인코딩으로 인해 문자가 깨지는 것을 방지할 수 있습니다.

예를 들어 iconv-lite 모듈을 사용하여 인코딩 변환을 구현할 수 있습니다.

const iconv = require('iconv-lite'); const buffer = iconv.encode('中文', 'GBK'); console.log(buffer); //  const str = iconv.decode(buffer, 'GBK'); console.log(str); // 中文
로그인 후 복사

간단히 말하면 Node.js에서 잘못된 코드 문제가 발생하는 것은 매우 일반적이지만 문제의 소스가 올바르게 식별되는 한 이에 상응하는 해결책을 취하면 이러한 문제는 쉽게 해결될 수 있습니다.

위 내용은 nodejs는 여전히 왜곡되어 있습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!