[CS] 문자열 Encoding이란? 아스키코드,유니코드, UTF-8 개념정리

2025. 2. 17. 11:39·Develop/CS

💻인코딩, 디코딩 이란?

-> 인코딩이란 어떠한 정보를 , 다른 형태로 변환하는 행위를 의미합니다.

컴퓨터에서 문자를 저장,연산하기 위해서는,  컴퓨터가 이해할수있는  즉 바이너코드 0과 1로  변환해주는 작업을 인코딩, 그반대로 바이너리코드를 사람이 이해할수있는 작업을 디코딩이라한다.

 

그렇다면 

컴퓨터가 0과 1로 연산하기 위해 데이터를 인코딩한다면, 값에 맞게 매핑하는 기준이 있어야 할 텐데 기준이 뭘까?

그게 바로 최초로 탄생한 ASCII 테이블이다.

 

 

아스키 코드는 처음으로 표준을 정의한 문자열 인코딩 방식이다. 0~127까지 대응되는 문자를 숫자로 표현한다.

하지만, 각나라에서 컴퓨터를 사용함으로써 한글,중국어,일본등 다양한 문자집합과 인코딩방식이 필요했음.

 

ECU-KR 탄생 

 

그래서 우리나라에서는 컴퓨터로 한글을 표현하는 방법으로 ECU-KR 문자 집합을 만들었다.

EUC-KR은 자체적으로 문자집합 + 인코딩 방식을 모두 포함한 형태이고,동시에 이 문자들을 컴퓨터에 어떻게 저장할지 

아스키코드는 문자를 표현할떄는 1바이트 한글을 표현할떄는 2바이트로 표현했다.

하지만 ECU-KR을 지원하지 않는 소프트웨어나 환경이 많아 , 사용 시 데이터 손실, 깨짐 등의 문제가 발생했고,

ECU-KR은 한글을 표현하는데 맞춰진 인코딩임으로써 다른나라 언어(중국어,일어) 표현하는데에는 부족했음.

 

 

유니코드 탄생

그래서 이를 해결하기 위해 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 처리할 수 있도록 만든 문자 집합표가 탄생한다.

 

유니코드는 왜 따로 인코딩 방식이 필요한것인가? (UTF-8)

 

아스키는 7비트(128개 문자) 만을 사용하기 때문에, 모든 문자가 단순한 정수 값(0~127) 로 직접 대응된다.
즉, "A"라는 문자는 01000001(2진수) = 65(10진수) 로 정해져 있고, 이를 저장하거나 전송할 때 추가적인 변환 과정이 필요 없다.따라서 아스키는 별도의 인코딩 방식이 필요하지 않다.

 

유니코드 문자는 단순히 저장할수 없고,특정 방식(UTF-8)으로 변환해야한다.

즉, 128개 문자만 다루는 아스키와 달리 유니코드는 100만 개 이상의 문자 가 포함되어 있습니다.
이렇게 많은 문자를 저장하고 전송하려면 단순한 1:1 대응 방식이 불가능 하므로, 다양한 인코딩 방식이 필요합니다.

유니코드 대표적인 인코딩 방식은 UTF-8을 사용한다.

 

그럼 UTF-8은 뭐야?

UTF-8(Unicode Transformation Format - 8-bit)은 유니코드 문자를 가변 길이(1~4바이트)로 인코딩하는 방식이다.UTF-8인코딩을 사용하는 이유는 다른 인코딩은

문자 A를 저장하려는데 1바이트로 충분히 표현할수 있는것을 고정크기 2바이트,3바이트,4 저장할시 메모리 낭비가 발생한다.하지만 UTF-8은자주 사용하는 문자(영어, 숫자)는 1바이트로 처리 하고 유럽어는 2바이트 한국어는 3바이트로 가변적으로 문자를 저장하기 떄문에 메모리 효율이 좋기떄문에 현재 UTF-8로 인코딩하는 방식이 국제 표준이다.

 

 

정리하자면?

  • 아스키는 문자 개수가 적어 1:1 매핑이 가능 하므로 별도 인코딩 방식이 필요 없음.
  • 유니코드는 문자 개수가 많아 효율적인 저장과 전송을 위해 인코딩 방식이 필요함.

쉽게 말해,
아스키는 "문자 = 숫자" 공식이 단순해서 변환 과정이 필요 없지만,
유니코드는 너무 많은 문자를 다루다 보니 "어떻게 저장할지"를 고민해야 해서 인코딩 방식이 필요한것 이다.

 

 

UTF-8 로 변환하는과정

각 문자는 유니코드(Unicode) 코드 포인트 로 표현된.
예를 들어: 한글 '한; 이라는 문자열은 유니코드 표에 -> U+D55C 범위에 표현되며 

 

코드 포인트 범위UTF-8 바이트 수바이트 패턴

 

  • 코드 포인트: U+D55C (10진수: 54620)
  • 범위: U+0800 ~ U+FFFF (3바이트)
  • UTF-8 변환: 1110xxxx 10xxxxxx 10xxxxxx
    • U+D55C → 1101 0101 0101 1100
    • 1바이트: 11101101 (0xED)
    • 2바이트: 10010101 (0x95)
    • 3바이트: 10011100 (0x9C)
    • 결과: '한' → 0xED 0x95 0x9C 으로 인코딩된다.

'Develop > CS' 카테고리의 다른 글

[CS] HTTP 메서드 PUT,PATCH 차이점 및 종류  (0) 2025.02.15
[Web]Servlet&JSP, Model1/Model2방식 차이와 스프링MVC  (1) 2025.01.22
Web Server 와 WAS 차이와 웹 서비스 구조  (0) 2024.02.18
쿠키 와 세션을 이용한 로그인 처리  (0) 2024.02.17
'Develop/CS' 카테고리의 다른 글
  • [CS] HTTP 메서드 PUT,PATCH 차이점 및 종류
  • [Web]Servlet&JSP, Model1/Model2방식 차이와 스프링MVC
  • Web Server 와 WAS 차이와 웹 서비스 구조
  • 쿠키 와 세션을 이용한 로그인 처리
dev_m.w
dev_m.w
BE 개발자의 공부기록✨
  • dev_m.w
    DEV.BLOG
    dev_m.w
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • Develop (20)
        • Java (5)
        • Spring (8)
        • Git (1)
        • CS (5)
        • etc (1)
      • 토이 프로젝트 (4)
        • 게시판 만들기 문제 해결 (4)
  • 블로그 메뉴

    • 홈
    • 깃허브
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바 #지네릭스
    Thread # 자바 쓰레드 #자바 #자바의 정석
    Java #HashMap #Collection
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev_m.w
[CS] 문자열 Encoding이란? 아스키코드,유니코드, UTF-8 개념정리
상단으로

티스토리툴바