classic ASP 한글 깨지는 경우, 뷁 !!
ASP 전성기에는 HTML 규약들도 자주 변경되던 시기였었더랬습니다. Web이 폭발적으로 성장하던 시기였기 때문이었죠.
그런 시대에 만들어진 웹문서들이라서, 아마도 아래 이미지처럼 "뀆뒣뼂뷓" 같은 한글 깨짐 현상들도 자주 목격이 될 수도 있습니다.
IIS를 설치하고 ASP 코드를 작성해서 실행해보면 한글이 깨지는 경우를 백퍼 만나게 됩니다.
그럴 땐 당황하지 말고, 아래와 같은 코드들을 활용해서 한글이 제대로 출력되도록 만들어봅시다.
연습 코드 작성
Response.Write() 을 이용해서 브라우저 출력을 해보도록 합니다.
<%
Response.Write("Hell World!")
%>
영문은 출력이 잘 되는군요. 코드 출력 부분에 한글을 넣어봅니다.
<%
Response.Write("헬로 월드!")
%>
음... 당장 한글이 깨져버립니다. 쓰기도 어려운 데 참 가지가지 하는군요.
일단 VSCode의 Emmet이 자동으로 생성해주는 HTML 양식을 갖춰봅시다.
<meta charset="UTF-8">이 자동으로 들어가 주니까요. 그래도 결과는 뭐...
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>classic ASP</title>
</head>
<body>
<%
Response.Write("헬로 월드!")
%>
</body>
</html>
한글이 깨질 때 추가하면 좋은 코드
문서 최상단에 다음과 같이 Language 코드를 추가해봅니다.
<%@Language="VBScript" CODEPAGE="65001" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>classic ASP</title>
</head>
<body>
<%
Response.Write("헬로 월드!")
%>
</body>
</html>
해결! 한 것 같아 보입니다. 일단 되긴 된거니까요.
참고로 Classic ASP는 VBScript 문법을 사용합니다.
제가 아주아주 꼬꼬마였을 때, 비주얼 베이직(Visual Basic)이라는 프로그래밍 언어가 있었다는 전설을 들었던 것도 같습니다.(사실 뭔지도 모르고 설치해서 따라쳐보았던 기억이.. 쿨럭...)
문서 최상단의 Language 코드 추가는, ASP를 학습하실 때 사용하시면 됩니다.
그런데 말입니다...
예전 방식의 meta 설정(HTML 4.01)
만약, 예전에 개발자들이 만들어 둔 레거시 시스템에서 ASP 파일을 내려 받았다면, 그 당시의 HTML 버전에 맞춰서 개발이 되었기 때문에, 아마도 meta 태그가 아래와 같이 코딩되어 있는 경우가 많을 것입니다. 그런데...
<%@Language="VBScript" CODEPAGE="65001" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<!-- meta charset="UTF-8" -->
<meta http-equiv="Content-Type" content="text/html; charset=uft-8"/>
<title>classic ASP</title>
</head>
<body>
<%
Response.Write("헬로 월드!")
%>
</body>
</html>
그런데.. 역시나 한글이 깨지고 있죠?
meta를 HTML 4.01 버전으로 설정했기 때문일 것 같은데요, 그래서 당시에는 별도로 추가해주던 코드가 더 있었습니다.
몇 가지 meta를 더 추가해보자
이 즈음에서 ASP는 서버 사이드에서 렌더링 해주는 언어라는 것을 꼭 기억할 필요가 있습니다. 즉, JS는 클라이언트 사이드에서 렌더링을 해주는 것이라서, 내 PC의 환경 설정을 그대로 활용하겠지만 ASP는 IIS의 설정 영향을 받고 동작한다는 것이죠.
음... 다시 말해서, 내 PC에서 테스트 환경을 만들었기 때문에 나의 PC에서 돌아가는 것 같지만, 사실은 IIS라는 웹서버에서 돌아가고 있다는 사실을 기억해야 합니다. 그래서 한글이 깨지는 경우가 발생하는 것이구요.
전체 코드를 아래와 같이 변경해봅니다.
<%@Language="VBScript" CODEPAGE="65001" %>
<%
Response.CharSet="utf-8"
Session.codepage="65001"
Response.codepage="65001"
Response.ContentType="text/html;charset=utf-8"
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<!-- meta charset="UTF-8" -->
<meta http-equiv="Content-Type" content="text/html; charset=uft-8"/>
<title>classic ASP</title>
</head>
<body>
<%
Response.Write("헬로 월드!")
%>
</body>
</html>
오예, 잘 돌아갑니다.
왜 그럴까요? 추론
저는 아직 서버에 대해서는 공부가 부족해서 여러 모로 잘 모르지만, 추가한 meta 태그를 가만 살펴보면 뭔가 좀 느낌이 오는 것도 같습니다.
사실 위에서 추가한 코드는 첫번째 라인만 추가해도 현재 상태에서는 한글 출력이 잘 됩니다.
2, 3, 4 번째는 주석처리를 했습니다.
<%
Response.CharSet="utf-8"
'Session.codepage="65001"
'Response.codepage="65001"
'Response.ContentType="text/html;charset=utf-8"
%>
이렇게 추론할 수 있지 않을까요?
<%
Response.CharSet="utf-8"
%>
→ 서버에서 응답(Response)해주는 내용의 캐릭터 셋이 uft-8 이다.
<meta http-equiv="Content-Type" content="text/html; charset=uft-8"/>
→ asp 페이지(=html)에 담고 있는 컨텐츠의 캐릭터셋이 utf-8 이다.
마치며
구글링을 해보니 아래와 같이 코드를 4개 추가하라는 글들이 많던데,
<%
Response.CharSet="utf-8"
Session.codepage="65001"
Response.codepage="65001"
Response.ContentType="text/html;charset=utf-8"
%>
당시의 유행 또는 습관적으로 추가하던 코드라서 그런 것이 아닐까 생각해보게 되었습니다.
classic ASP가 20년도 더 된 언어라서 옛날 참고자료들 위주로 남아 있는 상태이고, 전성기를 이루던 HTML 4.01 시대를 기준으로 하는 팁들이 많은 상황인 것 같습니다. 즉, 한창 전성기 시절에 불려지던 히트곡이 오래 오래 남겨 불려지는 것처럼 남았던 코딩의 유산이 아닐까 하는 생각이 듭니다.
아무튼 저는 HTML5 규격으로 사용할 때는 보다 간단하게 시도해보려고 합니다. 문서 최상단에 이 라인만 추가해서요.
<%@Language="VBScript" CODEPAGE="65001" %>
시도하다 에러 빵빵 터지면, 옛날 선배님들 방식을 참고해서 사용하면 되니까요.
그냥 코딩 역사공부하는 셈 치고, ASP 기초 수박 겉핥기 정도만이라도 눈동냥을 해둬야겠다는 생각이 듭니다.
오늘도 즐거운 코딩, 즐코딩.
KINcoding.
'classic ASP' 카테고리의 다른 글
윈도우10 IIS 설치 (ft. Classic ASP) (0) | 2023.08.03 |
---|
댓글