인코딩(ASCII, Unicode, UTF-8, UTF-16)
2023. 5. 24. 14:17ㆍC++/개인메모
ASCII
- American Standard Code for Information Interchange
- 1byte 공간 중 7bit를 사용하여 128개의 문자를 표현할 수 있다.
- 나머지 1bit는 오류 검산을 위한 패리티 비트로 사용하거나 확장 아스키를 표현하는데에 사용된다.
- 간단하고 메모리 공간을 효율적으로 사용하지만 지원하는 문자가 한정적이다.
Unicode
- 전 세계의 모든 문자를 표현하기 위한 국제 표준 문자 규격.
- 각 문자에 고유한 코드 값을 할당하여 문자를 유일하게 식별할 수 있도록 함.
- 4바이트(32비트) 테이블을 사용하여 약 42억개의 문자를 다룰 수 있다.
- 유니코드를 그대로 사용할 경우 사용 비중이 높은 로마자(ASCII) 입장에서는 4배 가량의 비효율성이 발생.
- 이러한 유니코드의 문제를 보완하기 위해 다양한 유니코드 인코딩이 나오게 됨.
- 유니코드가 규격이라면 유니코드 인코딩은 유니코드 숫자를 표현하는 방식.
UTF-8
- Unicode Transformation Format - 8bit
- 가변 길이 유니코드 인코딩.
- 문자에 따라 1바이트에서 최대 4바이트까지 사용이 가능함.
- 6byte까지 가능하지만 사실상 4byte 이상의 문자를 사용할 일이 없음.
- ASCII와 호환성을 갖는다(하위 호환성).
- 폭넓은 호환성과 단일 인코딩 방식이란 점 때문에 전 세계에서 가장 많이 사용되는 유니코드 인코딩이다.
UTF-16
- Unicode Trandsformation Format - 16bit
- 고정 길이 유니코드 인코딩
- 기본 다국어 평면(BMP, 거의 모든 문자)들은 2바이트를 사용하고 그 이상의 문자는 4바이트를 사용한다.
- 거의 모든 문자를 2바이트로 표현하기 때문에 고정 길이 인코딩 방식이라고 한다.
- UTF-8에서 한글 = 3byte, UTF-16에서 한글 = 2byte, 한글은 유니코드에서 2바이트 시퀀스로 매핑됨(인코딩 규칙 존재).
- 각 문자에 대해 일관적인 접근 속도를 제공하지만 메모리의 비효율적 운용이라는 단점이 존재한다.