*혼자공부하는컴퓨터구조+운영체제(강민철 / 한빛미디어) 책과 강의를 듣고 작성한 내용입니다 :)
📗 문자를 이해하는 방법
🌟 용어정리
- 문자집합 : 컴퓨터가 이해할 수 있는 문자들의 집합, 각 문자마다 코드 포인트(고유한 값)이 있음
- 인코딩 : 문자에 해당하는 코드 포인트를 컴퓨터가 이해할 수 있는 값(0과1)으로 변환
- 디코딩 : 컴퓨터가 이해할 수 있는 값에서 우리가 이해할 수 있는 값으로 변환
✔ 아스키코드
- 초창기 문자집합 중 하나로 영어 알파벳과 아라비아숫자, 일부 특수문자를 포함합니다.
- 각 문자를 7비트로 표현합니다.
- 따라서 2의7승개인 총 128개의 문자를 표현할 수 있습니다.
- 아스키코드표에서 각 문자마다 부여한 코드 포인트를 확인할 수 있습니다. (아스키코드표를 참조해주세요)
* 실제로 하나의 아스키 코드를 나타내기 위해 8비트를 사용하지만 1비트는 오류검출을 위해 사용되는 패리티비트 입니다.
아스키코드 인코딩 ex)
- 아스키코드표에서 A에 해당하는 코드포인트를 확인합니다.
- A의 코드포인트 십진수65를 이진수로 표현하면 0b1000001 입니다.
- 문자 A는 0b1000001로 인코딩 됩니다.
아스키코드로는 한글을 표현하지 못합니다.
한글을 표현하려면 어떤 문자집합과 인코딩 방식을 사용해야 할가요?
한글의 인코딩 방식에는 2가지 방법이 있습니다
1. 완성형 인코딩 : "강"이라는 완성된 문자 자체에 코드포인트를 부여하는 방법
2. 조합형 인코딩: "ㄱ", "ㅏ" , "ㅇ" 하나 씩 코드포인트를 부여하여 "강"의 코드포인트를 결정하는 방법
✔ EUC-KR
- KS X 1001, KS X 1003이라는 문자집합을 기반으로 한글을 인코딩 할 수 있는 완성형 인코딩 방식입니다.
- 한글 한 글자에 16비트가 필요합니다.
- 16비트는 4자리 십육진수로 표현할 수 있습니다.
- 총 2350개 정도의 한글 단어를 표현할 수 있습니다. 뷁, 믜 같은 글자는 표현할 수 없습니다
EUC-KR 인코딩 ex)
- "가"의 코드포인트를 십육진수로 확인합니다.
- "가"의 코드포인트 0xb0a1
- 십육진수0xb0a1를 이진수로 표현하면 0b1011000010100001입니다.
하지만 EUC-KR만으로는 "뷁", "믜"와 같은 한글을 표현할 수 없습니다.
또한 모든 언어가 인코딩 하는 방식이 다 다르다면 프로그램을 만들 때, 모든 언어의 인코딩 방식을 알아야하는 번거로움이 있습니다.
이러한 이유로 모든 나라 언어의 문자집합과 인코딩 방식을 통합하는 유니코드 문자집합과 UTF-8이 등장하게 됩니다 🤭
✔ 유니코드
- 유니코드는 현대 문자를 표현할 때 가장 많이 사용되는 문자집합 입니다.
- 유니코드 문자집합에서 한글은 완성형 인코딩 방식처럼 각 문자마다 코드포인트가 부여됩니다.
- 유니코드의 인코딩 방식으로는 UTF-8, UTF-16, UTF-32 등이 있습니다.
✔ UTF-8
- 가장 대중적인 유니코드 인코딩 방식입니다.
- 코드포인트를 인코딩값으로 삼지 않고 이 값을 다양한 방식으로 인코딩 합니다.
- 가변길이 인코딩으로 인코딩 결과가 1바이트 ~ 4바이트 입니다.
- 인코딩 결과가 몇 바이트가 될지는 코드포인트에 따라 달라집니다.
- 코드포인트 0x0 ~ 0x007F : 1바이트 (0_ _ _ _ _ _ _)
- 코드포인트 0x0080 ~ 0x07FF : 2바이트 (110_ _ _ _ _ 10 _ _ _ _ _ _)
- 코드포인트 0x0800 ~ 0xFFFF : 3바이트 (1110 _ _ _ _ 10 _ _ _ _ _ _ 10 _ _ _ _ _ _)
- 코드포인트 0x10000 ~ 0x10FFFF : 4바이트 (11110 _ _ _ 10 _ _ _ _ _ _ 10 _ _ _ _ _ _ 10 _ _ _ _ _ _)
EUC-KR 인코딩 ex)
- 유니코드에서 "한" 의 코드포인트는 0xD55C 입니다.
- 0xD55C는 0x0800 ~ 0xFFFF 사이에 존재하므로 인코딩 결과는 총 3바이트 입니다.
- 십육진수D = 이진수1101 / 십육진수5 = 이진수0101 / 십육진수5 = 이진수0101 / 십육진수C = 이진수1100
- 3바이트의 _에 이진수의 값을 차례대로 넣으면 11101101 10010101 10011100 입니다.
- 즉, "한"의 인코딩 결과는 0x111011011001010110011100 입니다.
'컴퓨터구조' 카테고리의 다른 글
[컴퓨터 구조] 명령어의 구조 (0) | 2023.06.06 |
---|---|
[컴퓨터 구조] 어셈블리어 2. 예제 (0) | 2023.05.01 |
[컴퓨터 구조] 어셈블리어 1. 기본 문법과 명령어 (0) | 2023.05.01 |
[컴퓨터 구조] 컴퓨터가 고급언어를 이해하는 방법 (1) | 2023.04.16 |
[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 1. 숫자 (0) | 2023.04.05 |