ASCII 한글 깨짐 - ASCII hangeul kkaejim

Q. 윈도우10 에서 메모장 실행 시 이상한 문자가 나옴.

작성할 때만 해도 멀쩡했던 메모장 텍스트파일(.txt)이 저장 후 불러왔을 때는 깨져있는 상황

(방법1)

ASCII 한글 깨짐 - ASCII hangeul kkaejim

문제 상황

[메모장] > [파일] > [열기] > 파일 선택

> '인코딩' 부분이 '자동 검색'으로 되어있을 텐데, 이 부분을 클릭해서 'UTF-8'로 변경한 뒤 [열기] 클릭

ASCII 한글 깨짐 - ASCII hangeul kkaejim

ASCII 한글 깨짐 - ASCII hangeul kkaejim

문제 해결

(방법2)

이 방법은 쓰지 마세요! 'UTF-8' 방식으로 쓰인 텍스트 파일들은 깨짐 현상없이 잘 보이나,

다른 방식으로 인코딩 된 텍스트 파일들이 오히려 깨진다는 제보를 받았습니다.

요약 : 일부 텍스트 파일이 깨져서 안보이니까 되도록 첫번째 방법 추천

⇒ 그러나 첫번째 방법을 사용해도 글자가 깨지시는 분은 아래 경로로 들어가서 'Unicode UTF-8 사용'의 체크표시를 해제해주시면 해당 파일은 제대로 보일 겁니다.

[제어판] > [시계 및 국가]

ASCII 한글 깨짐 - ASCII hangeul kkaejim

[국가 또는 지역] : 언어, 숫자, 시간 및 날짜에 대한 표시 설정

ASCII 한글 깨짐 - ASCII hangeul kkaejim

[관리자 옵션] > [시스템 로캘 변경] 클릭

ASCII 한글 깨짐 - ASCII hangeul kkaejim

[지역 설정] > "Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용"에 체크한 뒤 [확인] 클릭 > 컴퓨터 재부팅

ASCII 한글 깨짐 - ASCII hangeul kkaejim

+

텍스트파일에서 한글문자가 깨지는 근본적인 원인은 문자를 해석하는 인코딩 방식의 차이 때문입니다.

문자나 기호의 집합을 저장하거나 통신에 사용할 목적으로 부호화하는 것을 문자 인코딩(Encoding, 부호화)이라 한다. 인코딩된 문자 부호는 다시 디코딩(Decoding, 복호화)하여 본래 문자나 기호로 표현할 수 있다.

예를 들어 utf-8 방식으로 작성한 코드를 euc-kr 방식으로 디코딩 하면 이진코드와 문자가 매칭이 안되어서 이상한 갋뚫됅뷁 언어가 나온다.

ex) 0001이 utf-8 에서는 '나'를 가리키는 이진코드인데, euc-kr에서는 '뉅'을 가리킨다던지.. 물론 가상의예시임

참고로 우리 눈에 보이는 모든 컴퓨터 텍스트들은 사실 2진코드로 컴퓨터 세상을 돌아다닌다는 점.

● 문자 이진 코드 : 컴퓨터가 이해할 수 있도록 각 문자별로 약속된 이진수로 만든 특정한 값을 정해 둔 것. - 아스키코드(ASCII), 유니코드(Unicode)

● 아스키코드(ASCII) : 미국표준협회(ANSI)에서 컴퓨터 간 정보 교환을 위해 만든 표준 코드. 영문 알파벳 26자와 숫자,기호, 특수문자 등 128자를 7bit의 이진수로 부호화한 것이다.(각 나라별 언어를 표현할 수 없다.)

● 확장 아스키코드(Extended ASCII) : 8bit로 확장, 256가지 문자를 나타낼 수 있다.

● 유니코드(Unicode) : 전 세계의 모든 문자를 동일하게 표현하기 위한 국제표준코드. 모든 문자를 2byte(16bit)로 표현, 총 65,536개의 서로 다른 문자를 표현 가능. 문자를 계속 추가해 나갈 수 있다.(크기가 크기 때문에 비효율적이라는 의견多)

● UTF-8(Unicode-Transformation-Format) : 유니코드 형태의 문자를 변환하기 위한 규격. 가변 길이 문자 인코딩 방식으로 byte를 가변적으로 조절해 가면서 아스키(ASCII)코드의 길이에 맞춰 호환이 가능하다. 영문과 숫자는 1byte로, 한글과 한자 등은 3byte로 가변적으로 저장하는 방식으로 전세계 모든 글자들을 한꺼번에 표현 가능. 부호 길이(비트수)에 따라 UTF-8, UTF-16, UTF-32 등이 있다. = 다국어 지원

● EUC-KR (Extended Unix Code Page) : 8bit 한글 완성형 코드. 아스키(ASCII)값은 그대로 1byte로 표현하고 한글은 2byte로 표현할 수 있게 만든 방식.

요즘은 프로그래밍이며 문서작성에 대부분 UTF-8 방식을 사용하는 추세. Unicode의 일종이기 때문에 한글부터 시작해서 영어는 물론, 중국어 등등 다양한 언어들을 전부 표현할 수 있다. (=문자깨짐현상X)

#메모장외계어 #메모장중국어 #메모장오류 #윈도우메모장 #메모장글자

ASCII 한글 깨짐 - ASCII hangeul kkaejim

컴퓨터를 사용할 때 가장 많이 하는 작업이 무엇인가요? 각자 사람마다 자주 사용하는 것이 다르겠지만 보편적으로 문서작업은 모두 해보았을 것입니다. 손으로 직접 글을 쓰지 않고 키보드의 자판을 누르면 내가 원하는 글자가 표시가 되기 때문에 쉽게 사용할 수 있죠.

ASCII 한글 깨짐 - ASCII hangeul kkaejim

▲ 사진 1. 한글 창제.

우리 사용하는 키보드를 보면, 알파벳과 한글이 같이 표기되어 있습니다. 이때 한글은 다른 언어와는 다르게 모아쓰기라는 특별한 특징을 갖고 있는데요, 한 음절에 해당하는 한글의 자음과 모음을 하나에 모아서 표기를 하는 방식이죠. 이에 반해 알파벳과 같은 경우는 총 26개의 활자만 있으면 각자에 해당하는 문자를 한 칸씩 찍어내면 됩니다. 한글도 구성 글자의 개수만 세어본다면 닿소리 14자와 홀소리 10자로 모두 24자에 해당하지만 어떻게 조합하느냐에 따라서 어마어마한 경우의 수가 나오게 됩니다. 기존 활자에 비유하자면 활자가 만개 이상이 필요한 것이죠. 그렇기 때문에 한글을 전산화 시키는 과정이 다른 언어에 비해 까다로웠을 텐데요. 어떤 과정을 거쳐서 현재처럼 편리한 모습을 갖게 되었는지 알아볼까요?

컴퓨터는 수치계산을 목적으로 처음 만들어졌습니다. 계산하다는 뜻을 가진 영단어 compute를 어원으로 computer라는 단어가 만들어진 것만 봐도 알 수 있죠.

그러나 시간이 흐를수록 문자를 표기해야 하는 일이 생기기 시작했습니다. 하지만 컴퓨터는 오로지 0과 1로 이루어진 이진법을 이용한 신호만을 인식하기 때문에 사람이 인지하는 문자 데이터를 컴퓨터가 인지할 수 있게 변환시키는 규칙이 필요하게 되었습니다. 이렇게 사람의 정보를 컴퓨터의 신호로 변환시키는 과정을 인코딩(encoding)이라고 부릅니다.

문자를 인코딩하는 규칙은 생각보다 단순합니다. 우선 표현하고자 하는 전체 문자 집합을 설정합니다. 영어를 예시로 들면 A부터 Z까지의 문자이겠죠. 그 후 각 문자마다 숫자를 할당해 줍니다. ‘A’는 ‘1’에, B는 ‘2’에 대응시키는 등 모든 문자를 숫자 코드에 할당시켜주는 것이죠. 그러면 이제 문자를 코드로 표현할 수 있게 되는데요, 이것을 코드화된 문자 집합(CCS, Coded Character Set)이라고 부릅니다.

이러한 방식으로 최초로 아스키(ASCII) 코드가 생기게 되었습니다. 아스키코드는 미국 정보교환 표준 부호(American Standard Code for Information Interchange)의 줄임말로 알파벳 대소문자, 숫자, 특수 문자와 같이 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있는데요, 여기에 시작이나 종료와 같이 컴퓨터를 제어하기 위한 제어문자와 비어있는 Null 값을 포함하여 총 128개의 문자로 이루어져 있습니다. 아스키코드는 7비트로 2의 7승 값인 128개가 채워지게 된 것이죠.

하지만 알파벳 이외의 언어를 사용하는 국가들은 본인의 언어를 완벽하게 표현할 수 없었습니다. 독일어와 같은 경우 로마 문자를 사용하는데요, 영어에서 쓰는 26개의 알파벳에 ä와 같은 특수한 문자들이 포함되어 있습니다. 그러다 보니 유럽 국가들은 자국의 언어를 완전하게 표현할 수 없게 되는 것이죠. 이 문제를 해결하기 위해 아스키코드의 용량을 7비트에서 8비트로 늘리게 되었습니다. 이를 ‘확장된 아스키코드(Extended ASCII)’라고 부릅니다. 8비트가 되면서 2의 8승 즉, 256개의 공간이 생기게 된 것입니다. 기존의 128개에서 두 배의 공간이 생겨 남은 공간을 프랑스어, 독일어 등의 유럽어 문자들을 정의할 수 있게 되었습니다.

ASCII 한글 깨짐 - ASCII hangeul kkaejim

▲ 사진 2. 확장된 아스키코드. ⓒ 위키미디어

그렇게 알파벳을 기본으로 하는 국가들은 256개의 코드를 이용해서 문자 집합 안의 문자를 전부 표현하는 것이 가능해졌습니다. 하지만 그 외의 국가의 언어들은 아직도 사용할 수 없었는데요, 표준이 정해진 것이 아니었기 때문에 추가로 생긴 128개의 빈 공간을 각 나라마다 자신의 문자로 할당했습니다. 그중에서 128개 안에서 자국의 문자를 다 넣을 수 있는 표음문자인 아랍어, 태국어, 히브리어는 1비트의 남은 공간에 각자 자신들의 언어를 채워 넣었습니다. 표준이 정해진 것이 아니기 때문에 회사마다 각자 다른 문자를 할당하기도 했습니다.

이렇게 표준이 정해지지 않은 채 자신의 기준대로 사용하다 보니, 국경을 벗어나게 되면 코드가 깨져버리는 문제가 생기게 되었습니다. 다른 국가로 이메일을 보내면 그 국가가 할당하고 있는 문자로 나타나게 되는 것이죠. 우리나라도 마찬가지였습니다. 미국은 확장된 아스키코드의 추가 영역에 테두리 등을 그리기 위한 선기호를 할당시켰는데요, 그렇게 만들어진 프로그램이 한국으로 넘어오면 기호 대신 한국어가 표기되는 것입니다.

ASCII 한글 깨짐 - ASCII hangeul kkaejim

▲ 사진 3. 한글 깨짐. ⓒ http://ith.kr/chair/c/c 1201.html

이러한 문제가 지속적으로 생기면서 모든 문자를 다룰 수 있는 표준이 필요해졌습니다. 그렇게 유니코드가 탄생했습니다. 기존의 아스키코드는 8비트 즉, 1바이트 안에서만 표기해야 했지만 유니코드는 2~3바이트로 32비트에 해당하는 어마어마한 크기입니다. 그러다 보니 문자뿐만 아니라 악보 기호나 이모티콘 같은 기호도 포함시킬 수 있었는데요, 문자가 추가되거나 변경되는 상황이 발생할 때마다 버전을 업데이트하며 변경되고 있습니다.

유니코드로 한글을 표기할 수 있는 넉넉한 공간이 생겼습니다. 하지만 또 다른 문제가 생기게 되었는데요, 한글을 인코딩할 때 조합형과 완성형 중 어떤 방식을 사용하는 것이 효율적인가에 대한 논쟁이었죠. 이게 어떤 이야기일까요?

조합형은 한글이 창제된 원리와 같이 하나의 글자를 만들 때 초성, 중성, 종성을 조합해서 만드는 것입니다. 한이라는 글자를 만들기 위해 ㅎ, ㅏ, ㄴ을 더해서 만드는 것이죠. 반대로 완성형은 완성된 글자를 그대로 저장하는 방법입니다. 한이라는 글자는 ‘한’에 해당하는 코드를 그대로 가져와서 만드는 것입니다.

조합형은 어떤 단어든 제한 없이 만들 수 있다는 장점이 있지만 한 글자를 만들기 위해 여러 개의 코드가 필요하기 때문에 용량을 많이 차지하게 됩니다. 게다가 조합형으로 만들 수 있는 글자는 초성 125개, 중성 95개, 종성 138개로 이를 모두 곱해 1,638,750자가 나옵니다. 이론적으로만 160만 자가 나오는 것이죠. 이 중에서 우리가 실생활에서 주로 사용하는 글자는 3천여 개에 불과하다고 하니 비효율적인 부분이 있겠죠?

완성형은 적은 용량과 높은 효율성이라는 장점이 있지만 완성형 문자 집합에 저장되지 않은 글자는 컴퓨터로 표기할 수 없다는 단점이 있습니다. ‘설믜’라는 순우리말 이름을 가진 사람은 완성형에 ‘믜’라는 글자가 없기 때문에 자신의 이름을 표기할 수 없었다고 합니다. 이처럼 완성형은 원하는 단어를 표기하기 어려워 영화 러브 레터의 감독인 ‘이와이 슌지’의 이름도 ‘이와이 슈운지’로 알려졌었습니다. 그래서 대표적으로 조합형을 사용했던 워드프로세서인 한글과컴퓨터 ‘아래아 한글’은 “비행기가 날아간다 쓩”이라는 문장을 완벽하게 표기할 수 있다는 점을 강조해 홍보를 했습니다.

유니코드가 처음 발표된 1.0버전에서 한글은 완성형 2350자로 수록되었습니다. 그 이후의 1.1버전에서는 글자를 더 추가해 총 6656자가 수록되었는데요, 여기에는 조합형 한글 낱자들도 포함되어 있습니다. 하지만 중간에 글자를 추가했기 때문에 인코딩 배열 순서가 어지러웠고, 조합 방식도 주로 사용하는 방식과 달라서 불편했습니다. 그래서 유니코드 2.0버전을 제정할 때는 완성형 현대 한글의 모든 글자 11172개를 가나다순으로 정리해서 새로운 영역에 넣어달라는 요청을 하게 되었죠.

논쟁이 오간 끝에 우리의 요청이 받아들여졌는데요, 기존 U+3400 ~ U+4DFF에 있던 한글을 새로운 위치인 U+AC00 ~ U+D7A3에 배치하게 되었습니다. 그리고 이 사건을 계기로 한번 지정된 문자는 절대 다른 위치로 옮기거나 없애지 않는다는 정책을 새롭게 세웠습니다. 그렇게 지정된 11172자를 현재까지 우리가 사용하고 있습니다. 이렇게 등록된 한글은 88884개인 한자 다음으로 많은 코드를 차지하고 있는 문자입니다.

ASCII 한글 깨짐 - ASCII hangeul kkaejim

▲ 사진 4. 한글 전산화.

우리가 컴퓨터나 스마트폰을 이용해 누락되는 글자 없이 채팅을 하거나 글을 쓸 수 있게 되기 위해서 이렇게 여러 과정을 거쳤습니다. 문제를 해결하는 데 어려움은 있었지만 최선의 방법을 찾아 해결하게 되었죠. 이렇게 한글 입력 방식을 하나의 완성된 표준을 정함으로써 여러 문제들이 해결되는 것을 보며 표준이 얼마나 중요한지 새삼 느낄 수 있습니다.

ASCII 한글 깨짐 - ASCII hangeul kkaejim