본문 바로가기
IT/문자인코딩

문자 인코딩(Character Encoding) 유니코드, UTF-8, UTF-16, UTF-32, EUC-KR, CP949에 대해서 정리해보자

by 바닐라이코노미 2024. 6. 1.
반응형

이전 글들에서 ASCII 코드와 인코딩에 대해서 정리를 했었다

오늘은 더 확장된 개념인 유니코드와 유니코드를 인코딩하는 방식 

UTF(Unicode Transformation Format) 시리즈에 대해서 정리해보려 한다

 

[이전글 - ASCII코드, 인코딩 등]

 

바이너리(Binary), 바이트(Byte), 아스키(ASCII) 코드에 대한 정리

프로그래밍 또는 IT를 하다 보면 인코딩, 디코딩, 바이너리, 16진수 등 비슷한 단어들을 많이 듣게 된다이상하게 항상 헷갈리는 개념이다그리고 항상 이해했다 뒤돌아 서면 까먹게 된다잊어버리

vanilaeconomy.tistory.com

 

 

인코딩(Encoding)/디코딩(Decoding), MIME, Base64, 쉽게 이해하기

프로그래밍 개발을 하거나 IT적으로 대화를 할 때 많이 들어봤지만 헷갈리던문자인코딩 관련 용어들을 추가로 정리해보려 합니다 1. 인코딩/디코딩 이란 인코딩과 디코딩은 데이터를 정확하게

vanilaeconomy.tistory.com

 

 

1. 유니코드

유니코드는 전 세계의 모든 문자에 대해 고유한 번호를 할당하는 국제 표준이다

이는 다양한 언어와 기호를 하나의 일관된 문자 세트로 표현할 수 있게 해 주고, 유니코드는 현재 전 세계적으로 널리 사용되고 있으며, 인터넷과 다양한 컴퓨팅 시스템에서 문자 데이터를 교환하는 데 필수적 역할을 하고 있다

 

2. UTF(Unicode Transformation Format) 시리즈

- UTF-8 (현재 가장 많이 쓰임)

UTF-8은 유니코드 문자를 나타내는 데 가장 널리 사용되는 가변 길이 문자 인코딩 방식

UTF-8은 각 문자를 1바이트에서 4바이트 사이로 인코딩하며, ASCII 문자 세트와의 호환성을 유지

 

- UTF-16

UTF-16은 문자를 2바이트 또는 4바이트로 인코딩하는 또 다른 유니코드 인코딩 방식

주로 자바와. NET 같은 플랫폼에서 내부적으로 사용

 

- UTF-32

UTF-32는 모든 유니코드 문자를 4바이트로 일관되게 인코딩하고,

이 방식은 메모리 사용량이 더 많지만, 문자 접근 시간이 일정하여 특정 응용 프로그램에서 유용할 수 있다

 

3. 기타

- EUC-KR

EUC-KR은 주로 한국어를 위한 문자 인코딩 방식

이는 한글, 한자, 라틴 문자 등을 포함하여 한국어 텍스트를 디지털 형식으로 변환하는 데 사용된다

EUC-KR은 과거 한국어 웹 페이지와 문서에서 널리 사용되고 있었는데 현재는 UTF-8로 대체되고 있는 추세

 

- CP949

CP949는 EUC-KR의 확장으로, 더 많은 한글 문자를 지원한다

마이크로소프트에서 개발했으며,  '확장 완성형'이라고 불린다

CP949는 윈도우 운영 체제에서 한국어 지원을 위해 널리 사용되었지만 이것 또한 UTF-8로 대체되고 있는 추세

 

4. 가장 많이 쓰이고 있는 UTF-8 이 어떻게 변환되는지 알아보자

"티스토리" 글자에 대해서 UTF-8로 인코딩을 한번 해보자

 

1단계: 유니코드 코드 포인트 찾기

  • "티" = U+D2F0
  • "스" = U+C2A4
  • "토" = U+D1A0
  • "리" = U+B9AC

2단계: 유니코드 코드 포인트를 UTF-8로 인코딩

각 유니코드 코드 포인트를 UTF-8로 인코딩하고, UTF-8 인코딩 규칙에 따라, 각각의 코드 포인트는 1바이트에서 4바이트까지 변환될 수 있다

한글 문자는 일반적으로 3바이트로 인코딩!

  • U+D2F0 ("티") → ED 8B B0
  • U+C2A4 ("스") → EC 8A A4
  • U+D1A0 ("토") → ED 86 A0
  • U+B9AC ("리") → EB A6 AC

"티스토리"라는 단어는 UTF-8로 인코딩했을 때 다음과 같은 바이트 시퀀스를 가지게 된다

ED 8B B0 EC 8A A4 ED 86 A0 EB A6 AC

 

이렇게 끝나면 이해가 잘 되지 않으므로 "티" 부분만 떼어네 한번 더 상세하게 분석해보자
3바이트로 진행되므로 3바이트 인코딩 부분을 자세히 보자
 
 

UTF-8 인코딩은 유니코드 코드 포인트의 범위에 따라 다음과 같이 구분된다

1.  1바이트 인코딩 (U+0000 ~ U+007F): ASCII 문자에 해당하며, 첫 바이트는 0xxxxxxx 형태를 띤다

2.  2바이트 인코딩 (U+0080 ~ U+07FF): 첫 바이트는 110xxxxx로 시작하고, 두 번째 바이트는 10xxxxxx로 시작

3.  3바이트 인코딩 (U+0800 ~ U+FFFF): 첫 바이트는 1110xxxx로 시작하고, 두 번째와 세 번째 바이트는 10xxxxxx로 시작

4. 4바이트 인코딩 (U+10000 ~ U+10FFFF): 첫 바이트는 11110xxx로 시작하고, 그 뒤를 따르는 각 바이트는 10xxxxxx로 시작

 

"티" (U+D2F0)를 UTF-8로 인코딩하기

"티"의 유니코드 코드 포인트 U+D2F0은 3바이트 인코딩 범위에 속한다

따라서 우리는 이를 1110xxxx 10xxxxxx 10xxxxxx 형태로 인코딩을 진행

 

1. 2진수 변환: 먼저 U+D2F0을 2진수로 변환한다 1101(D) 0010(2) 1111(F) 0000(0)

2. UTF-8 형식에 맞게 분할: 이 2진수를 UTF-8 3바이트 형식에 맞게 재구성

  • 원본 비트: 1101001011110000
  • 3바이트 UTF-8 형식: 1110xxxx 10xxxxxx 10xxxxxx
  • 비트를 채워넣는다: 11101101 10001011 10110000

3. 비트 채우기: 빈자리에 해당하는 x를 원본 비트에서 채워 넣는다

  • 채워진 형태: 11101101 10001011 10110000

4. 16진수로 변환: 이제 각 바이트를 16진수로 변환

  • 11101101  → ED
  • 10001011  → 8B
  • 10110000  → B0

 

따라서, "티" (U+D2F0)의 UTF-8 인코딩은 ED 8B B0으로 완성

 

5. 한 가지 의문점은 EUC-KR, CP949등이 주로 한국어를 위한 문자 인코딩 방식이라고 했는데 UTF-8로 대체되는 이유는 뭘까

결론적으로는 UTF-8로의 전환은 인터넷의 글로벌화와 기술 발전에 따른 자연스러운 진화로, 사용자와 개발자 모두에게 더 넓은 호환성과 편의성을 제공하기 때문인데 아래의 각각의 인코딩의 특성을 알면 좀 더 이해가 될 것 같다

 

- EUC-KR의 특성

  • 지역적 제한성: EUC-KR은 한국어 처리에 특화된 인코딩 방식으로, 한글과 한자 등을 포함한 2350자 만을 표현할 수 있다 이는 초기 한국어 전자 통신과 문서 처리에는 충분했지만, 글로벌 커뮤니케이션과 다양한 언어의 문자를 포함하는 현대 인터넷 환경에서는 제한적
  • 확장성의 한계: EUC-KR은 확장성에 제한이 있어, 새로운 문자나 기호를 추가하기 어렵다 이로 인해 다국어 처리나 새로운 기호가 필요할 때 불편함이 따르게 되었다

- UTF-8의 특성

  • 글로벌 사용: UTF-8은 전 세계의 모든 문자를 표현할 수 있는 유니코드를 기반으로 한 인코딩 방식이다 이는 다국어 환경에서의 통신, 문서 작성, 웹 개발 등에 있어 광범위한 호환성을 제공한다
  • 가변 길이 인코딩: UTF-8은 가변 길이 인코딩 방식을 사용하여, 문자에 따라 1바이트에서 4바이트까지를 사용 이는 영문 알파벳과 같은 기본 문자는 적은 공간을 사용하면서도, 다양한 국제 문자를 효율적으로 표현할 수 있게 한다
  • 인터넷 표준 호환성: UTF-8은 웹 표준과도 잘 맞아, HTML, XML 등에서 기본 인코딩으로 권장되며, 이로 인해 웹 개발 과정에서의 호환성 문제를 줄일 수 있습니다.

- UTF-8로의 전환 이유

  1. 글로벌 커뮤니케이션: 인터넷의 글로벌화로 다양한 언어의 문자가 혼용되는 환경에서, UTF-8은 모든 문자를 하나의 통일된 방식으로 처리할 수 있게 해 준다
  2. 기술적 호환성: 현대의 컴퓨터 시스템, 소프트웨어, 인터넷 표준 등은 대부분 UTF-8을 지원하고 권장하며, 이로 인해 개발자와 사용자 모두에게 편리함을 제공
  3. 확장성과 유연성: 새로운 문자나 이모지 등을 추가할 때 UTF-8은 쉽게 확장할 수 있으며, 이는 지속적으로 변화하는 디지털 커뮤니케이션 요구를 충족시킬 수 있다
반응형