Platform/BackEnd

[Encoding] ASCII코드, 유니코드, UTF-8, EUC-KR, ... 뭐야?!

개랭갱깽스타 2020. 10. 14. 10:20

0.

앱에서 서버로 데이터 전송 시, 데이터 마다 약속한 인코딩과 인코딩에 따른 길이 제한이 쓰이고 있었다. 운영하고 있는 앱에서 중계서버 1개로 데이터를 보내지만, 중계서버에서 다시 여러 실 고객사 서버로 데이터를 전송한다. 실 고객사마다 인코딩 방식이 다르기 때문에, 앱에서 중계서버 전송 시, 인코딩과 인코딩에 따른 길이 제한을 맞춰주는 것이 중요하였다.

그 외에도 인코딩 개념은 중요하다고 생각되었다. '서버에서 통신 할 때 데이터가 깨지면 안 되니까!' 등의 이유로~

이 기회에 인코딩 개념을 한번 정리해놓는 게 좋을 것 같아 해당 포스팅을 쓰게 되었다.

 

1. 인코딩, Encoding

 

사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
                                                                                                                                    - 나무 위키

 

2. 문자코드

(컴퓨터가 사용하는 0과 1로) 변환할 때의 기준 = 문자코드

ASCII 코드

  • 7비트 부호체계
  • 000(0X00)부터 127(0X7 F)까지 총 128개의 문자 집합 제공
  • 일반적으로 데이터는 byte 단위로 다뤄지는데, ASCII는 1byte를 구성하는 8bit 중에서 7bit 만 사용
  • 나머지 1bit는 통신 에러 검출을 위해 사용(Parity bit) - 현재는 더 이상 사용 X
  • 장점: 매우 단순, 간단 -> 어느 시스템에서도 적용 가능
  • 단점: 2byte 이상의 코드를 표현할 수 없다. <- why? 

ASCII 코드표

확장 ASCII

  • ASCII에서 1byte를 구성하는 8bit 중 1bit를 활용해서 추가로 문자를 정의한 것
  • 추가된 128개 문자는 여러 국가와 기업에서 필요에 따라 서로 다르게 정의하여 사용

    • ISO 8859-1 (ISO Latin 1)
      • 국제표준화기구에서 정의한 확장 ASCII
      • 서유럽에서 일반적으로 사용하는 문자들을 포함
    • CP949
      • 마이크로소프트에서 정의한 한글 문자 집합
      • EUC-KR에서 지원되는 한글 2350자 외에 나머지 8822자가 추가
      • Win95 한글판에 탑재되어 배포됨

유니코드

  • 모든 문자 체계를 하나의 문자 집합으로 만든 것. <- 서로 다른 언어를 사용하는 컴퓨터들이 문제없이 통신하도록!
  • 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드
    • ASCII코드로 표현할 수 없는 문자들, 전 세계 모든 문자를 특정 숫자(키)와 1:1로 매핑
    • 한글의 경우) 조합형을 위한 자모, 완성형을 위한 한글 모두 포함
      • 조합형: 초성, 중성, 종성으로 구분하여 문자 작성
      • 완성형: 문자를 하나의 완성되어져 있는 글자로 인식

조합형/완성형

  • character set: 포함시키고자 하는 문자 집합을 정의 = UTF(Unicode Transformation Format)

유니 코드표 일부

EUC-KR 코드

EUC-KR 코드표 일부

 

3. 인코딩 방식

(컴퓨터가 사용하는 0과 1로) 변환하는 방식

유니코드를 사용하는 인코딩 방식

UTF-16

  • 모든 문자를 2byte의 고정 길이로 표현
  • UTF-8과 마찬가지로 ACII코드의 128개 문자 집합(character set)에 대해 호환성을 가짐.
  • 바이트 순서가 정해지지 않아 리틀/빅 엔디안 문제가 발생하기 때문에 인터넷 상에서의 사용을 권고하지 않음.
  • 예) A = 0x4100(Little-Endian)이나 0x0041(Big-Endian)으로 표현 (2byte)
    • ASCII 코드표를 보면, A는 0x41 이다. 이것을 유니코드표에서 찾으면 U+0041이 된다.
    • UTF-16은 고정크기이므로, 바이트 순서(Byte ordering)에 따라 위와 같이 표현된다. 

UTF-32

  • 모든 문자를 4byte의 고정 길이로 표현
  • 예) A = 0x4100 0000(Little-Endian)이나 0x0000 0041(Big-Endian)으로 표현 (4byte)
    • ASCII 코드표를 보면, A는 0x41 이다. 이것을 유니코드표에서 찾으면 U+0041이 된다.
    • UTF-32은 고정크기이므로, 바이트 순서(Byte ordering)에 따라 위와 같이 표현된다.
  •  
        •  
바이트 순서(Byte Ordering), 리틀 엔디안(Little-Endian), 빅 엔디안(Big-Endian)을 모르겠다면...?
https://gaeng-stroy.tistory.com/164

 

UTF-8

  • 하나의 문자를 1~4byte의 가변 길이로 표현(한글=3byte, 공백/영문=1byte)
  • 1byte 영역은 ASCII코드와 하위 호환되며 ASCII코드의 128개 문자 집합(character set)은 UTF-8과 동일하게 호환
  • 조합형 방식의 charater set
  • 사용빈도가 높은 글자=적은 저장 공간, 사용 빈도가 낮은 글자=많은 저장 공간
  • 현재 인터넷에서 가장 많이 쓰이는 인코딩이며 뛰어난 크로스 플랫폼 호환성을 가짐.
  • 예) A = 0x41로 표현 (1byte)
    • ASCII 코드표를 보면, A는 0x41 이다. 이것을 유니코드표에서 찾으면 U+0041이 된다.
    • 1byte로 표현 할 수 있기 때문에 UTF-8 인코딩 방식에서 위와 같이 표현된다.

 

EUC-KR 코드표를 사용하는 인코딩 방식

EUC-KR

  • EUC-KR 코드표를 사용하는 인코딩 방식
  • 한글을 2byte로 변환
  • 완성형 방식의 charater set
    • 한글 표현이 문자표에 없는 경우도 있다.
  • 한글, 숫자, 특수기호, 영문, 한문 일어 포함. 이 외에 다른 문자를 사용하는 나라의 언어는 인코딩 X

 

휴... 쓰다보니 너무 길다... 나머진 다음 포스팅에...

 

.참고

blog.naver.com/PostView.nhn?blogId=bbmobile&logNo=221360230141

 

한글 인코딩, EUCKR 과 UTF8 제대로 알기 (1)

개발자라면 한 번쯤 '한글'을 깨뜨려 본 경험이 있을 것이다. 어디서 누가 깨뜨렸는지, 왜 깨뜨렸는지 영문...

blog.naver.com

freestrokes.tistory.com/71

 

인코딩과 디코딩 (Encoding & Decoding)

인코딩과 디코딩 (Encoding & Decoding) 컴퓨터는 문자를 인식할 수 없기 때문에 숫자로 변환되어 저장됩니다. 변환해주기 위해서는 기준이 있어야하는데 이것을 문자 코드라고 하며 대표적으로 ASCII�

freestrokes.tistory.com

studyforus.tistory.com/167

 

한글 인코딩 종류 및 문제점 파악하기 (UTF-8 vs. EUC-KR)

인코딩 방식 이해하기 한글 인코딩 종류 윈도우를 기본 운영체제로 사용하였을 때는 전혀 느끼지 못했던 인코딩 방식이 웹서버를 운영하면서 인코딩 표준을 따라가다 보니 여러 문제점이 생겼�

studyforus.tistory.com

 

반응형