0과 1밖에 모르는 컴퓨터에 문자를 인식 시키려면 어떻게 해야할까?

 

문자를 0과 1로 이루어진 2진수로 나타내면 된다. 문자 하나에 정수 하나를 매핑해 두면 이 정수는 특정 문자를 표현한다는 것 을 알수있다. 이렇게 매핑된 정수를 코드 포인트라고 하며 문자와 문자에 매핑된 코드 포인트를 모아 놓은 집합을 부호화된 문자 집합이라고 한다. 

 

역시 무슨말인지 하나도 모르겠다.

 

아스키 코드, 유니코드

 

 - 아메리칸인들을 위한 대표적인 문자 인코딩 방식이다. 비트 일곱개로 문자를 표현하고 문자를 총 128개 까지 표현할 수 있다. 그말은 코드 포인트도 128개란 말이다.(0000000 ~ 1111111)

정수하나에 문자를 매핑시킨다, 코드 포인트는 아래의 표를 보면 정확히 알 수 있다

110 0001의 정수(2진수로)를 아스키코드 문자로 나타낸다면(매핑) a인것이다

110 0001을 코드 포인트라고 부른다.

파이썬으로 나타낸 아스키코드

 

아스키코드 표

 

다시 아스키코드로 돌아가서 아스키코드는 한글을 표현할 수 없다 왜냐하면 아스키코드를 만든 제작자가 아주 이기적이기 때문에 숫자와 영어만을 고려해서 만든것이다. 그래서 나온게 바로 유니코드이다. 유니코드는 7비트만을 이용해서 문자 집합을 표현하는 아스키와 달리 16비트로 확장해서 65,536개의 문자를 표현할 수 있게 확장한 버전인것이다.

이로서 한글을 나타낼 수 있게되었다! 

 

유니코드는 위와 위사한 표를 제공하는데 한글은 16비트로 AC00 ~ D7AF까지 자리 잡고있다

AC00은 '가'를 나타내는 16진수 코드포인트이다.

파이썬에서 AC00을 쳤을때 '가' 출력

자 이제 문자와 코드포인트의 관계를 매핑하는 표에 대해서도 알아봤다. 하지만 진짜 중요한건 인코딩이다

 

유니코드 인코드 방식

 - 코드 유닛코드포인트를 특정한 방법으로 인코딩했을때 변환되어 얻어지는 비트의 나열이다.

이말은 무엇이냐 UTF-8로 인코딩을 하면 코드 유닛은 UTF-8의 알고리즘에 의해 인코딩 된 코드 유닛을 뱉고 UTF-16으로 인코딩하면 UTF-16의 알고리즘에 의해 인코딩 된 코드 유닛을 뱉는다는 말이다

인코딩 방식에 따라 코드 유닛이 상이함

 

문자 '가'를 가지고 어떤것으로 인코딩 하냐에따라 결과물(코드 유닛)이 달라진다.

 

이제 이 코드 유닛을 어디에 쓰는가? 이것만 확인하면 정말 핵심은 끝이다.

  ※ UTF-8 , UTF-16의 변환법은 각각 다르고 어려우니 PASS

UTF-8 표

 

'가'만 보자 제일 왼쪽에 UTF8: 234, 176, 128이라고 나오고 그다음으로 UNICODE: AC0이라고 나오는 것을 볼 수 있다.

위의 '가'를 UTF-8으로 인코딩하면 0xea 0xb0 0x80이라는 16진수가 튀어나온다.

이를 다시 정수로 변환하면 234, 176, 128이 나온다 그렇다 UTF-8표에 나오는 바로 그 숫자이다.

UTF-8표에 매핑하는 방법

이런식으로 인코딩을 해서 나오는 값(코드 유닛)을 UTF-8표에 매핑시켜서 출력 시켜주는 것이다.

 

끄읏!!

+ Recent posts