문자 집합 & 문자 인코딩
- 문자 집합(character set) - 컴퓨터가 이해할 수 있는 문자의 모음
- 인코딩(encoding) - 코드화하는 과정을 뜻하고 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
- 디코딩(decoding) - 코드를 해석하는 과정을 뜻하고 0과 1로 표현된 문자 코드로 문자를 변환하는 과정
문자집합
예로 문자 집합이 {a,b,c,d,e}라고 한다면 컴퓨터는 중괄호 안의 문자는 이해를 한다.
하지만 나머지 f,g.. 등의 문자는 이해하지 못한다.
문자 집합에 속한 문자라도 문자를 0과 1로 변환을 해야 컴퓨터는 이해를 한다는점 기억하자.
문자 인코딩
0과 1로 문자를 변환하는 과정을 문자 인코딩이라고 한다.
같은 문자 집합에 대해서도 다양한 인코딩 방법이 있을 수 있다.
문자 디코딩
컴퓨터가 인식할 수 있는 문자들의 모음은 문자 집합이다.
그리고 그 문자들을 컴퓨터가 이해할 수 있도록 0과 1로 변환하는 과정을 인코딩이라 한다.
그럼 반대로 0과 1로 표현된 문자 코드를 사람이 읽을 수 있도록 '문자'로 변환하는 과정을
문자 디코딩이라 한다.
아스키 코드
아스키 ASCII; American Standard Code for Information Interchange
초창기 문자 집합 중 하나로 알파벳, 아라비아 숫자, 일부 특수 문자를 포함하고 있다.
이 집합에 속한 문자를 아스키 문자라고 하는데 각 7비트로 표현되고, 표현할 수 있는
정보의 가짓수는 2의7승개로, 총 128개의 문자를 표현할 수 있다.
아스키 코드를 이진수로 표현함으로써 아스키 문자를 0과 1로 표현할 수 있다.
즉, 아스키 문자는 아스키 코드로 인코딩되어 컴퓨터에 표현이 된다.
!! 실제로는 하나의 아스키 문자를 나타내기 위해서는 8비트(1바이트)를 사용한다.
하지만 8비트 중 1비트는 패리티 비트(parity bit)라고 불리는, 오류 검출을 위해 사용되는 비트이기 때문에
실제 문자 표현을 위해 사용되는 비트는 7비트이다.
표를 보면 십진수 65에 'A'가 있다. 65는 이진수로 1000001(₂)로 인코딩 된다.
이렇듯 아스키 코드는 매우 간단하게 인코딩되는 장점이 있지만, 단점도 있다.
위에 설명했듯이 문자 집합외에는 표현이 힘들다. 그래서 한글을 포함해 다른 문자,기호들을 표현할 수 없다는 점이다.
그래서 한국을 포함한 영어권 외 나라들은 문자 집합과 인코딩 방식이 필요했다.
EUC-KR
한글은 특수하다. 각 음절 하나하나가 초성,중성,종성의 조합으로 이루어져 있어서 영어와 많이 다르다.
그래서 인코딩 방식에도 완성형, 조합형이 존재한다.
완성형 방식은 '가'는 1, '나'는 2.. 이런 식으로 인코딩하는 방식이다.
조합형 방식은 각 성마다 비트열을 할당해 조합하는 방식으로 하나의 글자 코드를 완성하는 방식이다.
하지만 한글은 조합가능한 가짓수가 너무 많다.
쀍! 크헉
쀓! 믫! 으헉
웱!!!
.
.
.
.
......
아무튼.. 그래서 웹사이트의 한글이 깨진다든지, EUC-KR 방식으로 표현할 수 없는 이름으로
은행, 학교 등에서 피해랄 받는 사람도 있었다고 카드라.
그래서 이러한 문제를 해결하기 위해 등장한것이 마이크로소프트는 CP949
EUC-KR의 확장된 버전이라 더욱 다양한 문자를 표현할 수 있지만..
이마저도 한글을 표현하기에는 넉넉한 양이 아니라고 한다.
유니코드와 UTF-8
유니코드
각 나라의 언어를 언어별로 인코딩해야한다면 번거롭다.
그런데 모든 나라 언어의 문자 집합과 인코딩 방식이 통일된 표준 인코딩 방식이 있다면
언어별로 인코딩하는 수고로움을 덜 수 있지 않을까?
그래서 등장한 것이 유니코드(unicode)문자 집합이다.
유니코드는 EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분의 나라의 문자, 특수문자
그리고 특수기호나 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합이다.
현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합이며, 문자 인코딩 세계에서
매우 중요한 역할을 맡고 있다.
▼궁금하면 gogo ▼
www.unicode.org/charts/PDF/UAC00.pdf
UTF-8
아스키 코드나 EUC-KR은 글자에 부여된 값을 그대로 인코딩 값으로 했지만
유니코드는 다르다. 그때 사용하는 인코딩 방법이 UTF-8, UTF-16, UTF-32 등이 있다.
유니코드 문자에 부여된 값을 인코딩하는 방식이다.
UTF-8은 1바이트부터 4바이트까지의 인코딩 결과를 만든다.
인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에따라 결정된다.
지금까지 0과 1로 표현하는 방법을 알아봤다. 재밌죠 ?
1일 1 CS 끝