charset=utf-8 이란?
전세계의 문자들을 통일 시키는 국제 표준 콘소시엄 기구 (Universal code Consortium)에 의해 등재된 유니코드 인코딩 방식 중의 하나 인데요
정보를 전달 하는 단위는 바이트 이며 최소단위인 1바이트는 8비트의 조각들이 모여 만들어 집니다.
이 조각들은 이진수 0과1에 대응 한 주파수로 정보를 전달 하게 됩니다.
0을 가지는 숫자에는 전자의 흐름이 단절되고 1을가진 값에서는 다시 흐름이 이루어 지는 원리를 이용한것인데요
초기의 모르스 부호가 업그레이드 되었다고 볼수 있을 것 입니다.
어떤 문자이든 기본의 음절을 갖고 있으며 기본이 되는 음절 하나하나가 조합되어 하나의 글자가 되는 것이죠
이진수를 십진수로 쉽게 변환 하기
이진수(binary)에 대해 조금 알아야 하기때문에 지금부터 이진수에 대해 공부를 좀 해 봅시다.
이진수는 0과1의 두가지 숫자로 나열 됩니다.
우리가 일상에서 사용하는 십진수(decimal)은 0부터9까지 10개의 정수를 가지고 있다는건 누구나 알고 있는 사실 이지요
십진수에 익숙해 있기 때문에 이진수의 숫자를 대하게 되면 상당히 난감해 지지만 사실 이진수로도 우리가 계산하고자 하는 숫자를 모두 표현할수 있다는것은 다알고 계시리라 봅니다.
예를들어 이진수 10010이 갯수를 나타 낸다고 할때 십진수로 계산 해보면 이 숫자의 갯수를 알수가 있지요
한자리 올라 갈때 마다 제곱으로 늘어 나기 때문에 제일 끝자리 수인 0은 십진수의 1의자리수 이며 0×1=0이 되지요
10010 ↑
16 8 4 2 1
↓
=0
다음 10의 자리 수는 1이므로
1×2=2가 되고 10010
↑
16 8 4 2 1
↓
=2
그 다음 백의 자리 수는 0×4=0이 되고
10010
↑
16 8 4 2 1
↓
=0
천의자리수는 0×8=0이 되고
10010
↑
16 8 4 2 1
↓
=0
만의자리수는 1×16=16이 되겠죠10010
↑
16 8 4 2 1
↓
=16
그럼 위 결과 숫자들을 다 더하면 십진수 갯수가 됩니다.
0+2+0+0+16=18 십진수로 18개가 된다는 걸 알수가 있습니다.
자 이렇게 보니 이진수는 0과1밖에 없다는 것을 알수 있으며 0은 값을 가지지 않는다는 것을 알수가 있기 때문에 계산 할때는 빼버리고 1이 나오는 숫자에 자리의 배수를 곱해서 나온 결과 값들을 더해 주 면 더 쉽겠네요
위의 방법이 좀 유치해 보이긴 하지만 종이에 그려놓고 해 보면 아주 간단 하게 계산을 할수가 있는 것입니다.
처음에 나온 1이 십의 자리 수니까 1×2=2 다음에 나온 1은 십진수 만의 자리 수 이며 배수는 16 이니까 1×16=16이 되겠죠
그럼 결과 값들을 더해 주면 2+16=18 이라는 값이 나오네요 간단 하지요
1,2,4,8,16,32,이런 식으로 자리를 올라 갈때 마다 제곱의 값이 된다는것 만 알면 쉽게 값을 구할수가 있겠네요
위의 이진수를 좀 어렵게 계산식 으로 나열 해 보면 0×1+0×12 +0×22+0×42+1×82=18이렇게 계산식으로 표시 할수가 있겠지요
십진수를 이진수로 쉽게 변환 하기
역으로 십진수를 이진수로 고치는 법도 알고 있어야 하는데요
위의 십진수 18을 이진수로 고쳐 볼까요 이번에는 반대로 계산 하면 되겠지요
자그럼 한번 고쳐 볼까요
우선 32,16,8,4,2,1 이렇게 배수를 반대로 적어 놓고 그 배수의 자리수에 해당 하는 이진수 1을 대응 시킨후 나머지 가 있으면 그 수가 가지는 수를 이진수 자리에 갖다 넣는 방식 입니다.
◇여기서 찾아야 할 자리수는 자리를 찾는 자신의 수 보다 같거나 한자리 아래인 수가 되어야 합니다.
18 이니까 32의 자리는 안됩니다.
8 은 두자리 아래 수니까 안되겠지요
십진수 18
32 16 8 4 2 1 ↑
18
↓
=18-32 x 불가
8 자리는 한번더 자리를 찾아야 하기 때문에 안되겠죠32 16 8 4 2 1 ↑
18
↓
=18-8=10 x 불가
자 그럼 이런 법칙을 가지고 계산 해 보도록 합니다.
18이니까 32보다는 적고 16보다는 많지요 그럼 먼저 16의 자리수에 18을 대응 시켜 넣습니다.
32 16 8 4 2 1 ↑
18
↓
=18-16=2 정상
그렇게 되면 2가 남지요 2의 자리수는 십의 자리수에 있는 것을 알수가 있지요 그럼 그자리에 2를 대응 시킵니다.
32 16 8 4 2 1 ↑
2
↓
=2-2=0
그리고 나머지의 자리는 값이 없으므로 모두0을 대응 시키면 되겠지요 볼까요 32 16 8 4 2 1
↑ ↑ ↑ ↑ ↑ ↑
0 18 0 0 2 0
↓
=2-2=0
32=0 ,16=1, 8=0 ,4=0,2=1,1=0 이것을 자리수 대로 나열 하면 여기서 32라는 자리수는 임의로 부여 한 자리니까 빼고 나열 해 보면 10010이런 이진수로 바꿀수가 있네요 .
32 16 8 4 2 1
↑ ↑ ↑ ↑ ↑ ↑
0 18 0 0 2 0
↓ ↓ ↓ ↓ ↓ ↓
x 1 0 0 1 0
↓
=10010
하나더 예를 들어 볼까요
십진수 55를 이진수로 고친다면 어떻게 될까요?
위의 방법 대로 하면 아주 간단히 고칠수가 있겠지요
1,2,4,8,16,32,64,이렇게 해놓고 나중에 거꾸로 나열 해도 되겠네요
55는64보다는 적고 32보다는 크니까 32자리에 1을 대응 시킵니다
그러면55-32=23이 남네요 23은 16보다 크지만 32보다는 작으니까16에 1을 대응 시킵니다.
23-16=7이 남지요 7은 4보다는 크고 8보다 적으니까 4의자리에1을 대응 시킵니다.
그런후에 남는3은 2의자리에 1을 대응 시키고 남는1은 1의 자리에 1을대응 시킨후 대응 하지 못하는 숫자들은 모두 0으로 대응 시키면 되겠지요
계산을 정석대로 한 도표를 만들어 보면 아래 그림처럼 되겠지요
십진수 55 64 32 16 8 4 2 1
↑ ↑ ↑ ↑ ↑ ↑ ↑
0 55 23 0 7 3 1
↓
55-32=23-16=7-4=3-2=1
↓ ↓ ↓ ↓ ↓ ↓ ↓
x 1 1 0 1 1 1
↓
=110111
여기서 한가지 기억 해야 할것은 64라는 숫자에 대응 하는 숫자는 없지만 55라는 숫자의 자리를 찾으려 가상으로 부여한 자리이기 때문에 나중에 나열 할때는 빼야 한다는 것 입니다.
32=1, 16=1, 8=0, 4=1, 2=1, 1=1 나열하면 110111 이런 값을 가지게 되는 것입니다.
순수한 숫자로만 볼때는 첫자리 0을 빼는 것이 맞지만 아스키 유니코드 에서는 7자리 수를 다 표기 해야 하기에 첫자리0까지 표기 해야 합니다.
아스키에서는 0110111로 표기 해야 합니다.
※코드표 페이지
자 그럼 왜 여기서 이런 계산을 해야 하냐고 물을수 있을 것 같은데요 앞서 여러번 이야기 드렸듯이 디지털 정보의 전송은 이진수로만 할수 있기 때문 입니다.
다음에 나오는 아스키 코드 도표에는 문자별 고유 숫자를 십진수로 표현 해주고 있는데요
이 십진수를 이진수로 대응 시켜야 인코딩이 완성 되기 때문에 기본 적으로 우리는 이것을 알고 넘어가야 한다는 것입니다.
<아스키 문자 코드 도표>
33-! 34-" 35-# 36-$ 37-% 38-& 39-' 40-( 41-) 42-× 43-+ 44-, 45-- 46-. 47-/ 48-0 49-1 50-2 51-3 52-4 53-5 54-6 55-7 56-8 57-9 58-: 59-; 60-< 61-= 62-> 63-? 64-@ 65-A..~..90-Z 91-[ 92\ 93-] 94-^ 95-- 96` 97-a..~..122-z 123-{ 124-| 125-} 126-~127-del
위의 도표를 보면 문자를 십진수 33~126에 각각 대응 시켜 놓았다 는걸 알수가 있습니다.
아스키(ASCII)는 미국의 정보교환 표준코드를 뜻 하는데요
앞서 우리는 정보 전송의 기본 단위는 8비트가 한묶음인 1바이트라고 배웠습니다.
이것을 이진수로 나타내면 최소 [00000000] 에서 최대 [11111111] 까지 나타 낼수가 있지요
위에서 십진수로 계산하는 방식으로 계산 해보면 [00000000]=0 [11111111]=255 라는 값이 나오게 되니까 256가지 글자까지 대응 할수가 있겠지요
그런데 아스키는 모두 다 대응 하는데 들어가는 가지수가 기본 제어 문자 32개 와 특수문자 ! 부터 del 까지 94개 더해서 127 가지 밖에 안되기 때문에 최대치의 값은 127이 되고 127을 이진으로 나타내 보면 127= [01111111] 이런 값이 나오게 되지요 여기다 blank 하나를 더해 128가지를 나타내고 있습니다.
그래서 아스키는 [00000000] 부터 [01111111] 까지의 이진수로 다 나타 낼수가 있게 되겠지요
그렇다 보니 이진수에서 첫자리에 오는 0 의값은 의미가 없으므로 없애 버리고 7비트 로 도 표시가 가능 하게 되지요
그래서 아스키는 7비트가 한묶음이 되는 1바이트 코드로 이루어지게 되었 답니다.
이것이 유니코드의 기본판이 되는데요 이코드로는 다른 언어 와 8비트를 다 사용 하는 이미지 파일이나 영상파일 소리 파일 같은 파일들은 전송이 안되기 때문에 8비트 바이트를 전송 하기 위해 편집을 해야 하는 경우가 생기는데 이것을 마임<MIME>인코딩 이라 하지요
그런데 아스키 코드를보면 0부터 32까지를 빼고 33부터 시작 하고 있는데요 0부터32는 시스템을 제어 하는코드에 할당을 해 주었기 때문 입니다.
전세계 문자의 가지수는 현재 유니코드 표준에 등재 된것만 100가지 나 된답니다.
유니코드에는 아스키를 가장 우선 배정한후 공용을 제외한 언어들에 순차적으로 배정을 해 주고 있답니다.
우리 한글의 경우 3바이트 구간 유니코드에 배정 되어 있지요
<meta=http-equiv="Content-Type" content="text/html; charset=utf-8"/>
이제 위에 나오는 utf-8 이 가지는 의미를 대충은 알게 되었습니다.
※코드도표 페이지 십진수를 십육진수로 쉽게 바꾸는 방법참고
이번 시간은 여기까지 다룹니다.주요 한글 유니코드 도표 바로가기 다음엔 유니코드 도표를 이용해서 utf-8의 한글판의 유니코드 범위와 주요 글자들의 자리수를 알아보고 이진수로 나타내 보는 방법에 대해 알아 보도록 하겠습니다.