R136A1

문자열 인코딩 개념 정리 본문

WEB SECURITY/documents

문자열 인코딩 개념 정리

r136a1x27 2021. 9. 24. 06:18

SBCS(Single Byte Character Set): 한 문자를 1byte로 표현하는 방식

ASCII (American Standard Code for Information Interchange) 1byte

최초의 문자열 인코딩, 7bit로 구성됨, 128개 문자 표현 (1bit는 패리티비트)

"영어를 위한 문자" 다른 언어는 표현 불가

 

확장ASCII(Extended ASCII) ANSI (American National Standard Institue) 1byte

8bit로 구성됨, 256개의 문자 표현(8개의 언어 × 128개의 문자)

1bit로 CP(CodePage)를 나타낸다 - 각 언어별로 Code 값을 주고, Code마다 다른 문자열 표를 의미하도록 약속

(KR 949 / JP 932 / CN(간) 936)

 

EUC-KR: 한글 지원을 위해 Unix계열에서 나온 완성형 코드. 2byte

ANSI를 한국에서 한번 더 확장한 것으로, 외국에서는 지원이 안 될 가능성이 높다.

 

CP949: CodePage 949, 한글 지원을 위해 Windows계열에서 나온 확장 완성형 코드

마이크로소프트에서 EUC-KR을 개선하고 확장하여 만듦(MS949라고 부르기도 함)

EUC-KR과 호환이 되며, 표현이 되지 않는 문자는 조합하여 표현

 

c.f) 완성형 코드 vs 조합형 코드

완성형 코드: 완성된 문자 하나하나마다 코드 번호를 부여한 것

조합형 코드: 한글의 자음과 모음 각각에 코드 번호를 부여한 후 초성, 중성, 종성을 조합하여 하나의 문자를 나타냄

 

WBCS(Wide Byte Character Set): 한 문자를 2byte↑로 표현하는 방식

확장ASCII가 생겼다고 해도, 128개 안으로 표현될 수 있는 독일어, 불어, ... 등만 가능하다.

중국어, 한글, 일본어의 경우에는 그 수가 훨씬 넘으므로

1바이트 더 추가하여 2바이트로 사용하는 형식이 ISO-2200에 정의되었다.

 

UTF (Unicode Transformation Format)

    유니코드(Unicode, Universal Coded Character Set)

    영어를 포함하여 전세계의 모든 문자를 2byte 내 index와 1:1 매핑해놓은 단일 코드표

    즉, 엄밀히 말하면 인코딩 방식이 아니다.

 

기본 UTF는 유니코드를 기반으로 적절히 조작해 2byte 로 표현된 index를 문자로 변환하는 인코딩 방식이다.

UTF-__ : 몇 비트 단위로 사용해서 index를 나타낼 것인가.

UTF-8, UTF-16, UTF-32는 각각 MBCS인지 WBCS인지 나뉜다.

모두 유니코드의 index를 나타내기 위한 방법이기 때문에, 서로간의 변환은 잘된다

 

MBCS(Multi Byte Character Set): 한 문자를 다양한 byte로 표현하는 방식

멀티바이트(Multi-Byte)

"가변 길이 문자 인코딩"

문자 하나를 표현하는 데 있어 다양한 바이트 수를 사용하는 방식

특정 문자 집합마다 CodePage가 존재한다

영어와 같이 ASCII에 포함되는 문자 - 1byte

ASCII에 포함되지 않는 다른 언어 - 2byte ↑


UTF-8bit (MBCS)

확장ASCII(ANSI)가 다국어를 지원하기 위해서는 CP 정보를 미리 알고있어야 한다는 단점이 있으나

UTF-8은 멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣음 (Unicode의 속성)

 

확장ASCII(ANSI)는 고정바이트(1byte)형태로 8개의 언어, 128자만 표현 가능하지만

UTF-8은 멀티바이트 개념으로 최대 백만개의 문자 표현 가능

 

1byte, 첫 128자 = ASCII코드 값 = 영어

2byte = 중동지역 언어, 많은 유럽 언어

3byte~4byte = 동아시아권 언어 (한국, 중국, 일본 등)

 

매우 일반적인 방식이지만, 3byte 이상의 문자를 사용할 경우에는 비효율적일 수 있다.

 

UTF-16bit (MBCS)

16bit 기반으로 저장하는 UTF-8의 변형

- 한글의 경우 UTF-8은 3bytes지만 UTF-16은 가끔 2bytes면 되는 등 용량의 이점이 있는 것 같으나

  매번은 아니라 용량의 이점이 크다고 보긴 어렵다

- endian 처리를 고려함에 따른 복잡성 증대

- ASCII와 호환 불가

 

2byte: 영어, 중동지역, 유럽, 동아시아 (한글의 일부는 여기에)

4byte: 동아시아 (한글의 일부는 여기에)

 

UTF-32bit (WBCS)

모든 문자를 4byte로 인코딩하여 문자 변환 알고리즘이나 가변길이 인코딩 방식에 대한 고민을 할 필요 없으나

매우 비효율적인 메모리 사용으로 자주 사용되지는 않는다

 

+ 4byte를 넘어 5byte를 써야하는 언어는 없기 때문에, 최대 byte는 4라고 봐도 무방하다.'

 

참고!

https://ju3un.github.io/encodng-unicode-ansi/

 

인코딩(Encoding) - ASCII, ANSI, Multi-Byte, Unicode 등 - (1)

1. 아스키(ASCII) 코드 (American Standart Code for Information Interchage)의 약자 컴퓨터는 숫자(0과1)만 인식할 수 있기 때문에, 숫자와 문자를 대응시킨 것 영문 알파벳을 사용하는 대표적인 문자 인코딩 7bit

ju3un.github.io

더 공부하기! (한국어 EUC-KR / CP949 / UTF-8)

https://studyforus.tistory.com/167

Comments