0과 1밖에 모르는 컴퓨터에 문자를 인식 시키려면 어떻게 해야할까?
문자를 0과 1로 이루어진 2진수로 나타내면 된다. 문자 하나에 정수 하나를 매핑해 두면 이 정수는 특정 문자를 표현한다는 것 을 알수있다. 이렇게 매핑된 정수를 코드 포인트라고 하며 문자와 문자에 매핑된 코드 포인트를 모아 놓은 집합을 부호화된 문자 집합이라고 한다.
역시 무슨말인지 하나도 모르겠다.
아스키 코드, 유니코드
- 아메리칸인들을 위한 대표적인 문자 인코딩 방식이다. 비트 일곱개로 문자를 표현하고 문자를 총 128개 까지 표현할 수 있다. 그말은 코드 포인트도 128개란 말이다.(0000000 ~ 1111111)
정수하나에 문자를 매핑시킨다, 코드 포인트는 아래의 표를 보면 정확히 알 수 있다
110 0001의 정수(2진수로)를 아스키코드 문자로 나타낸다면(매핑) a인것이다
110 0001을 코드 포인트라고 부른다.
다시 아스키코드로 돌아가서 아스키코드는 한글을 표현할 수 없다 왜냐하면 아스키코드를 만든 제작자가 아주 이기적이기 때문에 숫자와 영어만을 고려해서 만든것이다. 그래서 나온게 바로 유니코드이다. 유니코드는 7비트만을 이용해서 문자 집합을 표현하는 아스키와 달리 16비트로 확장해서 65,536개의 문자를 표현할 수 있게 확장한 버전인것이다.
이로서 한글을 나타낼 수 있게되었다!
유니코드는 위와 위사한 표를 제공하는데 한글은 16비트로 AC00 ~ D7AF까지 자리 잡고있다
AC00은 '가'를 나타내는 16진수 코드포인트이다.
자 이제 문자와 코드포인트의 관계를 매핑하는 표에 대해서도 알아봤다. 하지만 진짜 중요한건 인코딩이다
유니코드 인코드 방식
- 코드 유닛은 코드포인트를 특정한 방법으로 인코딩했을때 변환되어 얻어지는 비트의 나열이다.
이말은 무엇이냐 UTF-8로 인코딩을 하면 코드 유닛은 UTF-8의 알고리즘에 의해 인코딩 된 코드 유닛을 뱉고 UTF-16으로 인코딩하면 UTF-16의 알고리즘에 의해 인코딩 된 코드 유닛을 뱉는다는 말이다
문자 '가'를 가지고 어떤것으로 인코딩 하냐에따라 결과물(코드 유닛)이 달라진다.
이제 이 코드 유닛을 어디에 쓰는가? 이것만 확인하면 정말 핵심은 끝이다.
※ UTF-8 , UTF-16의 변환법은 각각 다르고 어려우니 PASS
'가'만 보자 제일 왼쪽에 UTF8: 234, 176, 128이라고 나오고 그다음으로 UNICODE: AC0이라고 나오는 것을 볼 수 있다.
위의 '가'를 UTF-8으로 인코딩하면 0xea 0xb0 0x80이라는 16진수가 튀어나온다.
이를 다시 정수로 변환하면 234, 176, 128이 나온다 그렇다 UTF-8표에 나오는 바로 그 숫자이다.
이런식으로 인코딩을 해서 나오는 값(코드 유닛)을 UTF-8표에 매핑시켜서 출력 시켜주는 것이다.
끄읏!!
'컴퓨터 기본' 카테고리의 다른 글
Thread 란? (0) | 2020.05.07 |
---|---|
컴퓨터 하드웨어 구성(CPU) (0) | 2020.02.11 |
클래스 관계 HAS-A 상속(합성, 통합) (0) | 2019.11.08 |
class의 static이란?(실무에서 바로 통하는 자바) (0) | 2019.10.28 |
운영체제 32bit vs 64bit (0) | 2019.06.14 |