[Node.js] 한글 깨지는(인코딩) 문제 해결하기

문제점

node.js GET 예제 실습 중 인코딩 문제가 발생했다. 예시에는 분명 localhost로 접속하면 한글이 나온다고 했는데 나는 왜 깨져서 나오지요? 예제 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var http = require('http');

// 1. 요청한 url을 객체로 만들기 위해 url 모듈사용
var url = require('url');
// 2. 요청한 url 중에 Query String 을 객체로 만들기 위해 querystring 모듈 사용
var querystring = require('querystring');

var server = http.createServer(function(request,response){
// 3. 콘솔화면에 로그 시작 부분을 출력
console.log('--- log start ---');
// 4. 브라우저에서 요청한 주소를 parsing 하여 객체화 후 출력
var parsedUrl = url.parse(request.url);
console.log(parsedUrl);
// 5. 객체화된 url 중에 Query String 부분만 따로 객체화 후 출력
var parsedQuery = querystring.parse(parsedUrl.query,'&','=');
console.log(parsedQuery);
// 6. 콘솔화면에 로그 종료 부분을 출력
console.log('--- log end ---');

response.writeHead(200, {'Content-Type':'text/html'});
response.end('var1의 값은 '+parsedQuery.var1);
});

server.listen(8080, function(){
console.log('Server is running...');
});

정확히 'var1의 값은’에서 '의 값은’이 깨져 나온다. 누가 봐도 인코딩 문제.


해결 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var http = require('http');
var urlencode = require('urlencode');

// 1. 요청한 url을 객체로 만들기 위해 url 모듈사용
var url = require('url');
// 2. 요청한 url 중에 Query String 을 객체로 만들기 위해 querystring 모듈 사용
var querystring = require('querystring');

var server = http.createServer(function(request,response){
// 3. 콘솔화면에 로그 시작 부분을 출력
console.log('--- log start ---');
// 4. 브라우저에서 요청한 주소를 parsing 하여 객체화 후 출력
var parsedUrl = url.parse(request.url);
console.log(parsedUrl);
// 5. 객체화된 url 중에 Query String 부분만 따로 객체화 후 출력
var parsedQuery = querystring.parse(parsedUrl.query,'&','=');
console.log(parsedQuery);
// 6. 콘솔화면에 로그 종료 부분을 출력
console.log('--- log end ---');

response.writeHead(200, {'Content-Type':'text/plain; charset=utf-8'});
response.end('var 1의 값은: ' + parsedQuery.var1);
});

server.listen(8080, function(){
console.log('Server is running...');
});

딱 이 부분에 차이가 있었다. 기존 response.writeHead(200, {'Content-Type':'text/html'});에서 response.writeHead(200, {'Content-Type':'text/plain; charset=utf-8'});로의 수정!


TIP 아닌 TIP

Mac 유저들은 파일 저장시 모든 파일 형식이 UTF-8로 설정된다. 윈도우 운영체제를 사용할 경우 꼭!!! 파일 인코딩을 UTF-8로 지정해야 한다. 관련 내용은 이 블로그에 잘 정리되어 있으니 한번 확인해 보는 것이 좋을 것이다. 😃


Share