본문 바로가기

Technology

한글이 깨져요




웹서핑을 하다 보면 가끔 읽을 수 없이 깨진 글자들을 만나게 됩니다. 꼭 보고 싶었던 글이 깨져서 볼 수 없었던 기억이 있으신가요? 분명히 제대로 입력한 것 같은데 결과 화면에서는 외계 문자로 보였던 적이 있으신가요? 오늘은 웹페이지에서 문자들 중 특히 우리말 한글이 깨져 나오는 현상과 간단한 해결 방법에 대해 알아보려고 합니다.


1. 꿹쁅쒥뛟, 외계 문자를 만났어요. 


“인코딩”. 한 번쯤 들어보셨을 겁니다. 웹페이지에서 한글이 깨지는 이유 중 대부분이 바로 이 인코딩 문제 때문입니다. 인코딩은 문자 그대로 “코드를 해석하다”라는 의미를 가지고 있는데요. 도대체 무슨 코드를 해석한다는 걸까요? 우리가 보는 웹페이지는 사실 처음부터 영어나 한글로 저장되는 것이 아닙니다. 어떤 문자가 입력되면 이를 0과 1로 디지털화 하여 저장하는데, 이를 해석하는 방식이 인코딩입니다. 

사람마다 사물을 해석하는 관점이 다른 것처럼 인코딩에도 여러 종류가 있습니다. 인터넷 설정에서 “EUC-KR”이나 “UTF-8”이니 하는 말을 들어보셨을 거에요. 바로 이들이 인코딩. 즉, 문서를 해석하는 방식입니다. 

그럼 웹페이지가 깨지는 이유는? 위의 “해석 방식"이 잘 못되었기 때문입니다. A형식으로 저장된 문자를 B형식으로 해석하려고 하면 당연히 문제가 생기겠지요? 마치 .hwp파일을 MS워드에서 열 수 없는 것과 비슷합니다.



2. 인코딩을 통일하면 되지 않나요?


그럼 해석의 방식을 통일하면 어떨까요? 어려운 인코딩을 신경 쓰지 않고 쾌적하게 웹서핑할 수는 없을까요? 

여기서 잠깐 컴퓨터에서 문자 표현 방법의 변화를 살펴볼까 합니다. 컴퓨터에서 문자를 보여주는 방식은 서구에서 개발되었기 때문에 당연히 영어 알파벳을 중심으로 이루어져 있었습니다. 아스키(ASCII)라고 하는 미국정보교환표준부호 문자셋(글자 묶음)이 시초입니다. 아스키는 7비트로 이루어져 있습니다. 0과 1, 7비트.. 정신이 아득해져 오지만 간단히 2의 7제곱. 128개의 문자를 저장할 수 있다는 의미입니다. 알파벳 26글자와 몇 가지 특수 문자 좀 넣으면 꽉 차겠군요. 당연히 한글이나 일본어, 중국어는 표현할 수 없습니다.

이후 우리말 한글을 표현하기 위한 완성형 문자셋이 필요했고, 이렇게 개발된 것이 EUC-KR이라는 방식입니다. 아직도 많은 웹페이지들이 이 방식을 사용하고 있습니다. 참고로 일본도 비슷한 문제 해결을 위해 EUC-JP를 만들어 사용해 왔습니다.

하지만 세계화의 흐름을 타고 다국어 문자셋이 필요했습니다. 이렇게 탄생한 것이 “유니코드"입니다. 위키피디아의 정의를 보면 “전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준” 라고 합니다. 세계의 모든 문자를 표현할 수 있다니 굉장히 멋집니다! 이런 유니코드를 표현하고 해석하기 위해 만든 방식이 “UTF-8”입니다. 현재 대부분의 웹페이지들이 UTF-8로 인코딩됩니다. 국제 표준이기도 하고 모든 문자를 표현할 수 있으므로 이제 복잡한 다른 인코딩을 신경 쓰지 않아도 됩니다.





3. 인코딩 문제 해결하기 


한글 웹페이지에서 문자가 깨지는 경우는 대부분 EUC-KR과 UTF-8 방식을 잘 못 사용했기 때문입니다. 웹브라우저에서 간단히 해결하는 방법은 아래와 같습니다. 




4. U+D5D0? 유니코드란?


앞에서 우리는 “전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준”이라고 하는 유니코드에 대해 알아봤습니다. 그런데 이 유니코드가 문자로 해석되지 않고 바로 노출되는 경우가 있습니다. “U+”로 시작해서 4글자의 문자로 이루어진 코드인데요. 웹서핑 중 간혹 마주쳤을 겁니다. 이제 U+로 시작하는 문자를 만나면 당황하지 않고 유니코드라고 생각하시면 됩니다. 유니코드는 그 이름대로 매우 방대합니다. 그래서 문자를 4자리로 코드화하여 사용합니다. 여기에는 기본적인 알파벳, 한글, 일어, 중국어 뿐 아니라 특수 문자도 포함되어 있는데요. 이미 다룬 적 있는 이모지(emoji)도 여기에 포함됩니다. 

유니코드 대응표를 보면 더욱 자세히 알 수 있습니다. 



유니코드 대응표 보기 


- 함께 읽기 : 글보다 그림문자, 이모지(Emoji)로 말하는 캠페인들 



5. %EC%8A%AC? 이건 무슨 문자일까?


인코딩 문제도 아니고, 4자리 코드인 유니코드도 아닌 문자들. “%EC%8A%AC”과 같은 문자를 보신 적이 있을 겁니다. 주로 웹페이지의 주소(URL)에서 볼 수 있습니다. 

이를 “URL인코딩” 또는 “퍼센트 인코딩”이라고 합니다. 영문 알파벳과 숫자를 제외한 나머지 문제는 16진수로 표현하는 방식으로 웹페이지의 주소에 주로 쓰이는데, 알파벳과 숫자 이외의 주소를 해석하지 못하는 경우를 위해 사용됩니다. 

URL인코딩된 문자가 궁금할 때는 어떻게 할까요? 고맙게도 이를 해석할 수 있는 도구들이 많이 존재합니다. http://www.url-encode-decode.com/ 에 방문하여 해석이 어려운 문자를 입력한 후, 하단의 “Decode”버튼을 누르면 문자열이 해석되어 나타납니다. 반대로 한글 문자를 “Encode”하여 암호화(!)할 수도 있겠군요. 





6.  ? 알듯 말듯한 엔티티코드


역시 웹서핑 중 만날 수 있는 문자입니다.  , © 처럼 앰퍼센드(&)로 시작해서 세미콜론(;)으로 끝나는 문자셋입니다. 웹이라는 환경에서만 볼 수 있는 문자이며 이를 “엔티티 문자(entity code)”라고 합니다. 웹페이지 상의 띄어쓰기나 유니코드로 직접 입력하기 어려운 자주 쓰는 문자들의 묶음입니다. 





위 표처럼 &와 ;사이에 간단한 단어를 넣어 표현합니다. 엔티티코드를 잘 정리해 놓은 http://entitycode.com/ 이나 http://entity-lookup.leftlogic.com/을 방문하면 더욱 자세하고 다양한 문자들을 만날 수 있습니다. 카피라이트 문자를 (c)로만 표시한 적은 있으신가요? &를 입력했는데 이상하게 출력된 적이 있으신가요? 띄어쓰기를 여러 번 하고 싶은데 한 칸만 되어서 불편하신 적은 없으신가요? 웹페이지를 만들 때는 엔티티코드를 사용해 보시기 바랍니다. 



7. 마치며


웹서핑을 하다 깨진 한글을 보면 궁금하기도 하고 답답한 적이 많았을 겁니다. 국제 표준인 UTF-8을 사용하고, 제대로 입력이 되었다면 잘 보였겠지만, 아쉽게도 아직 표준화되지 않은 문서들이 많습니다. 마치 고대의 한자들을 우리가 잘 읽기 어려운 것처럼 인터넷의 역사만큼 다양한 문자 해석 방식이 존재하는 것이죠. 

그 원인이 인코딩 문제인지, 유니코드가 보이는 것인지, URL인코딩된 것인지, 엔티티코드인지 구분해 보고 각각의 해석 방식대로 해석해보는 건 어떨까요? 그냥 “한글이 깨져요"하고 창을 닫아버리기보다는 원인을 찾아보고 고대 암호문을 해독하듯 방법을 찾다 보면 웹서핑을 하는 재미가 생기지 않을까요? 




참조


- URL encode/ decode 

- 유니코드 대응표

- entitycode 

- entity lookup 



by 북극곰 발자국