상세 컨텐츠

본문 제목

아스키/EUC-KR/UTF-8 에 대한 짧은 접근

개발

by 베르월드 2023. 4. 24. 21:15

본문

우리는 한자, 한글, 영어, 다국어 등 다양하게 문자를 사용한다.

그런데 이런 문자를 어떻게 컴퓨터는 이해하고 처리하는지 궁금하였다.

 

알다시피 컴퓨터 언어는 01로 이루어진 무수한 숫자의 집합체이다.

01로 글자를 표현하고자 처음에 창안된 방법이 아스키 코드라고 할 수 있다.

이 아스키 코드로는 알파벳, 아라비아 숫자, 소수의 특수 문자를 표현할 수 있다.

이 코드방식은  01로 나타낼 수 있는 8자리의 범위를 갖는 표현방식이다.

그러면 그 표현해 낼 수 있는 방법은  2*2*2*2*2*2*2*2 가지가 된다고 한다.

그런데 여덟개의 자리수 중에서 한 개의 자리는 오류 검출을 위해서 사용하기에 남은 7개의 자리수로 문자를 나타낸다면 128가지의 문자를 나타낼 수 있게 된다.

 

한눈에 들어오는 아스키 코드(0과 1로 표현)

문자 0과 1로 표현함(8자리) 
A 0100 0001
B 0100 0010
C 0100 0011
D 0100 0100
E 0100 0101
F 0100 0110
G 0100 0111

이렇게 8자리로 표현이 되다니 컴퓨터 언어는 너무 쉽고 심플한 것 같다.

그리고 아스키코드가 왜 우리나라 말처럼 많은 문자를 나타내기 힘든 지 알게 되는 대목인 것 같다.

 

그러면 이제 세계에서 가장 과학적인 언어인 한글, 우리말을 컴퓨터가 처리하거나 표시하는 방식을 생각해 보자.

1. 간단하게 16자리수의 01을 사용하여 한글을 나타내는 방법이 있고

2. 그때 그때 상황에 맞추어서 8자리수부터 32자리 수까지 융통성있게 한글을 나타낼 수도 있다.

1번 방법이  euc-kr,  2번은 utf-8 방식이라고 불린다.

 

 

euc-kr 방식은 아래처럼 16자리이다.

 

문자 0 1로 표현함(16자리) 16진수 표현
1011 0000 1010 0001 b0a1
1011 0000 1010 0010 b0a2
1011 0000 1010 0011 b0a3
1011 0000 1010 0100 b0a4
1011 0000 1010 0101 b0a5
1011 0000 1010 0110 b0a6
1011 0000 1010 0111 b0a7
 

4자리씩 끊어서 보자!. 놀라운 일이 일어난다.

바로 16진수로 바로 변환이 된다.

아주 보기 좋게 합리적으로 한글이 매칭된다.

euc-kr 은 이렇게 칼로 자르듯이 정말 정말 신기한 구조이며 

euc-kr 에 대해서 구글링해 보자면 많은 표로 그려지는데 볼 수록 신기하게 한글과 매칭이 되는 체계라고 할 수 있다.

 

이렇게 하여 거의 2300개의 한글을 매칭 시킬 수 있는 구조가 euc - kr 이다.

하지만 이 euc-kr 로는 표현할 수 없는 한글도 있어서 자기이름을 표현못해서 불이익을 당하는 사람이 나올 수 있다고 하니 이 euc-kr 은 대를 위해서 소를 희생한 것이기에 약간은 냉정해 보인다.

 

 

한글을 표현하는 또다른 방식이  utf-8 방식이라는 방식은 01을  8자리 로 시작해서 32자리까지 과감하게 사용하여 하나의 문자를 나타낼 수 있게 하였다. 그래서 하나의 글자를 나타내려면 8자리수, 16자리수, 24자리수, 32자리수의 융통성을 발휘하여 거의 모든 글자를 나타내게 된다.

 

이는 어려운 말로 하자면 시작하는 숫자의 패턴이 문자 자리수를 몇 개로 할지 결정하는 구조이다.

패턴을 보고 어떤 원리가 숨어 있는지 파악해 보면

이런 패턴이다

유니코드범위 0 1로 표현 형태
0000 ~ 007F 0000 0000 ~ 0111 1111
000080 ~ 0007FF 110xxxxx 10xxxxxx
000800 ~ 00FFFF 1110xxxx 10xxxxxx  10xxxxxx
010000 ~ 10FFFF 11110xxx 10xxxxxx  10xxxxxx 10xxxxxx

이 방법은 

한글을 순서대로 쭉 일렬로 세워서 순번을 정하고(유니코드)

유니코드에 해당되면 그 패턴에 맞춰서 0과1의 자리수에 배당하는 방식이다. 

이 방법은 잘보면 중복이 생기지 않고 처음 시작하는 문자를 보고 그 문자안에 숨겨진 숫자( X)를 알아내서 조합할 수 있는 수수께끼풀이 문자이다. 

이 방법은 형태를 알면 너무 재미있는 암호가 아닐까 한다. 

 

예를 들면 순번과 0,1의표현은 다음과 같게 된다.

문자 순번(유니코드) (01로 표현)
ac00 11101010 10110000 10000000
ac01 11101010 10110000 10000001
ac02 11101010 10110000 10000010
ac03 11101010 10110000 10000011
ac04 11101010 10110000 10000100
ac05 11101010 10110000 10000101
ac06 11101010 10110000 10000110
 

 

맨앞의 패턴이 1110으로 시작하기에  유니코드는 000800 ~ 00FFFF 에 해당됨을 알 수 있다.

생각할 수록 효율적으로 좋은 아이디어이다

작은 자리수에는 많이 사용하는 문자를 배치해서 쓰고 

잘 사용하지 않는 문자는 뒤 순번을 줘서 글자수를  아낄 수 있다. 

 

 

최소의 영어단어만 나타낼 수 있는 영어중심의 아스키!!!

단호하고 선택과 집중의 냉정하며 현실주의자 보이는 euc-kr !!!

포용력과 효율성그리고 아주 과감한 스타일을 추구하는 utf-8!!!

 

이 모든 것들이 세상을 살아가는 사람들의 그림자처럼 느껴지기에 약간은 더 인간적인  IT 세계?로 한걸음 다가선 느낌이다.

'개발' 카테고리의 다른 글

💡 URI, URL 이란?  (0) 2023.05.04
[git, github]  (0) 2023.04.28
"CORS 오류: 왜 발생하고 어떻게 해결할까?"  (0) 2023.04.14
코드 세상 속 시간 제어: 동기와 비동기  (0) 2023.04.07
[HTML] 엔티티 코드 (Entity Code)  (0) 2023.03.31

관련글 더보기