Google AdSense


[Encoding] 글자가 깨져 보여요~ by Sigel

우리는 웹서핑을 하다보면 이런 화면 처럼 글자가 깨지는 페이지를 자주 보게 된다.

이런 경우 참 난감하다. 인코딩에 관해서 아는 사람은 인코딩을 바꿔서 보면 돼겠지만 인코딩을 바꾸면 새로고침이 된다. 그러면 가끔 메인화면으로 돌아가서 다시 찾아오는 힘겨운 상황이 연출되기도 한다.
인코딩 방식을 바꾸는 방법은 인터넷 익스플로러에서는 메뉴 -> 보기 -> 인코딩 -> 한국어를 선택하면 되고, Firefox에서는 보기 -> 문자 인코딩 -> 한국어를 선택하면 된다.

어디까지나 인코딩 방식을 바꾸는 방법은 임시방편이고, 이제 원인을 찾아서 문제를 해결해 보자. 과연 왜 이렇게 글자가 깨져서 나올까?? 어떠한 컴퓨터이든지 '일반 텍스트'라는 개념은 존재하지 않는다. 사용하는 컴퓨터 종류나 운영체제에 따라서 여러가지의 인코딩 방식을 사요하여 저장하고 있다. 인코딩 방식은 UTF-8, ASCII, ISO 8859-1, EUC-KR 등 전공자가 아니라도 한번쯤은 들어봤을 이름들일 것들이다.

ASCII라는 코드는 모든 글자를 32에서 127 사이의 숫자를 사용해서 표현할 수 있게 만들었다. 그리고 128에서 255사이에 위치한 코드는 특수문자를 사용하는 등 임의대로 사용할 수 있게 비워두었던 것이다. 하지만 이 좁은 곳에 너무나도 많은 사람들이 자신이 필요로 하는 문자를 넣어 쓰기를 원했다. 예를 들어 몇몇 PC에서 문자코드 130은 é를 표시하지만, 이스라엘에서 팔린 컴퓨터는 히브리 글자일 지멀(λ)로 표시하기에, 미국 사람이 이력서(résumé)라는 단어를 이스라엘로 보내면 rλsumλ로 도착할 것이다. 그리고 아시아의 나라에서는 도저히 이 8비트로는 모든 문자를 표현할 수 없어서 DBCS(Double Bytes Character Set)로 부르는 두 바이트 문자 집합 시스템으로 해결한다. 영문 같은 글자는 1바이트로 저장을 하고 한글 같은 글자는 2바이트로 저장을 하는 정말 어처구니 없는 방식이다.

일단 여기서는 왜 저런 화면이 나오는가에 대해서 얘기를 하기로 했으니 여러 인코딩 방식에 관한 자세한 내용은 제쳐두고, 인코딩 방식이 문제라는 점만 염두하자. 웹 사이트가 깨져 보인다는 문제의 대부분은 페이지의 문자열을 어떤 인코딩 방식으로 사용할지 알려주지 않았기 때문이다. 인터넷 익스플로러 같은 경우는 이를 대비해서 흥미로운 작업을 수행한다. 익스프롤러는 특정 언어와 특정 인코딩을 조합했을 때 나타나는 바이트 빙도를 토대로 문서에 사용한 언어와 인코딩 방식을 추측해낸다. 사람이 사용하는 모든 언어는 글자 사용 빈도 히스토그램에서 특징적인 패턴을 보이기에 이런 편법이 잘 작동하는 듯 보이지만 이런 방식은 모국어의 글자 빈도 분포에 정확히 맞아 떨어지지 않는 몇 가지 글자를 사용해서 페이지를 만드는 순간, 인터넷 익스플로러가 다른 언어로 인식해서 보여주기 때문에 엉망으로 보일 것이다.

이를 방지하려면 페이지에 어떠한 인코딩을 사용할 것인지 알려주어야 한다.
<meta http-equiv=Content-Type content="text/html;charset=euc-kr">
대부분이 알고 있는 거대 포털 사이트들(네이버, 다음, 파란, 엠파스 등)이나 제대로된 웹 페이지에 가서 소스를 보면 모두 이러한 태그가 헤더 안에 들어있다. 이 문서는 text/html 타입이고, 인코딩 방식은 euc-kr 방식을 사용한다는 것을 알려주는 것이다. 웹 브라우저는 이 태그를 보자마자, 페이지 파싱을 중단하고 지정한 인코딩을 활용해서 전체 페이지를 다시 해석한 다음에 새로 시작한다. 간단한 이 한 줄의 태그가 없어서 페이지가 엉망으로 보이는 것이다.

babo disk라는 곳에서 스팸 메일이 와서 가봤더니 페이지가 깨져 보이더군요. 그리고 스펨메일은 정말 사절입니더...=_=;;; 스팸 메일인지 알면서 눌러본 나도 참 바보다...=_=;;

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://entireboy.egloos.com/tb/1479777 [도움말]

덧글

덧글 입력 영역