greenkang
그린 개발log
greenkang
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • 알고리즘 (20)
    • MySQL (0)
    • 생각 (0)
    • 컴퓨터구조 (6)
    • Spring · SpringBoot (1)
    • Java (1)
    • 장애 대응 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 장애 대응 회고
  • TOPCODER알고리즘트레이닝
  • 프로그래머스 거리두기 java
  • 어셈블리어
  • 파이썬
  • python
  • java
  • 백준7569
  • 41. First Missing Positive
  • 백준 24479번 자바
  • 프로그래머스 거리두기 자바
  • 프로그래머스
  • 백준7569 java
  • 백준 17265번
  • 알고리즘
  • 컴퓨터구조
  • 리트코드
  • 백준
  • 백준 1065번 자바
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
greenkang

그린 개발log

컴퓨터구조

[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 2. 문자

2023. 4. 5. 21:23

*혼자공부하는컴퓨터구조+운영체제(강민철 / 한빛미디어) 책과 강의를 듣고 작성한 내용입니다 :)

 


📗 문자를 이해하는 방법

🌟 용어정리

  • 문자집합 : 컴퓨터가 이해할 수 있는 문자들의 집합, 각 문자마다 코드 포인트(고유한 값)이 있음
  • 인코딩 : 문자에 해당하는 코드 포인트를 컴퓨터가 이해할 수 있는 값(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
    '컴퓨터구조' 카테고리의 다른 글
    • [컴퓨터 구조] 어셈블리어 2. 예제
    • [컴퓨터 구조] 어셈블리어 1. 기본 문법과 명령어
    • [컴퓨터 구조] 컴퓨터가 고급언어를 이해하는 방법
    • [컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 1. 숫자
    greenkang
    greenkang

    티스토리툴바