Unicode(유니코드), UTF-8, UTF-16, Surrogate(서로게이트, 써로게이트) 쌍이란?
유니코드 (ISO-10646)
1. 흔히 Unicode라고 불리는 문자세트와 그 부호화에 대해서 정의하고 있는 표준이다.
2. 유니코드는 전 세계 문자 인코딩 표준이다. 시스템은 문자 및 문자열 조작에만 유니코드를 사용합니다.
3. 유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다.
4. 유니코드는 유니코드 협회가 제정한다. 또한 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자들을 다루기 위한 알고리즘 등을 포함하고 있다.
5. 코드 포인트에 의해 각 문자의 위치가 표시되어 숫자 값이 할당되며 앞에 U+를 붙이고 뒤에 16진수 값으로 표현한다.
UTF-8
1. UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방식중의 하나이다.
2. 한 문자를 나타내기 위해 1~4바이트를 가변적으로 사용한다.
3. (U+0000 ~ U+FFFF): 기본다국어평면(BMP, Basic Multilingual Plane)에 속하는 문자들
- ASCII (영문, 공백문자, 기호 등), 1바이트 (128문자로 인코딩) (U+0000 ~ U+007F)
- 로마 / 그리스 / 아랍문자, 2바이트 (1,920 문자로 인코딩)
- 중국 / 일본 / 한국 등 아시아계 3바이트
4. UTF-8은 유닉스, HTML, 웹페이지 등에서 주로 사용된다.
UTF-16
1. UTF-16은 유니코드 문자 인코딩 방식의 하나이다. 4 바이트로 표현된다. (1,114,112 문자로 인코딩)
2. 주로 사용되는 기본 다국어 평면 에 속하는 문자들은 그대로 16비트 값으로 인코딩이 되고 그 이상의 문자는 특별히 정해진 방식으로 32비트로 인코딩이 된다.
3. 유니코드로 정해진 표현 범위를 넘어서는 것도 표현 가능하다. (특수 한자,이모티콘 등)
4. UTF-16은 MS(MicroSoft)사 윈도우 계열, 자바 언어, 자바스크립트 언어 등에서 사용한다.
5. (U+0000 ~ U+FFFF): 기본다국어평면(BMP, Basic multilingual plane)에 속하는 문자들이다.
- 이 범위에 속하는 문자들 만 그대로 16 비트(2 바이트) 값으로 인코딩이 된다.
- 그 이상의 문자는 아래와 같이 특별히 정해진 방식으로 32 비트(4 바이트)로 인코딩된다.
6. (U+10000 ~)
- U+10000 이상은 서로게이트 영역(Surrogate)이다.
- 인코딩 값(2 바이트) 2개를 합쳐 구성됨
- 즉, 기본 다국어 평면에 포함되지 않는 문자(16 비트로 값을 표현할 수 없는 문자들)은 서로게이트(Surrogate) 문자 영역에 해당하는 2개의 16 비트 문자로 변환되어 이 한 쌍(즉, 32비트)이 그 문자를 나타내게 된다.
서로게이트 쌍(Surrogate Pair)에 의한 유니코드의 코드 포인트 값의 계산법이다.
u = (a - 0xD800) * 0x400 + (b - 0xDC00) + 0x10000
(a : 상위 서로게이트 U+D800 ~ U+DBFF, b : 하위 서로게이트)
서로게이트쌍
1. 서로게이트쌍은 보조문자를 표현할 때 사용한다.
2. 보조 문자는 BMP를 벗어나는 문자이고 "서로게이트"는 UTF-16 코드 값이다. (U+10000 이상)
3. UTF-16의 경우 단일 보조 문자를 나타내려면 "서로게이트 쌍"이 필요하다.
4. 첫 번째(높음) 서로게이트는 U+D800~U+DBFF 범위의 16비트 코드 값이다.
5. 두 번째(낮은) 서로게이트는 U+DC00에서 U+DFFF 범위의 16비트 코드 값이다.
6. 서로게이트 메커니즘을 사용하여 UTF-16은 1,114,112개의 잠재적 유니코드 문자를 모두 지원할 수 있다.
'개발 용어 정리' 카테고리의 다른 글
[서버용어] 스케일 업(Scale-up), 스케일 아웃(Scale-out), 스케일 인(Scale-in), 스케일 다운(Scale-down) (0) | 2023.03.01 |
---|---|
[서버용어] 서버리스(serverless) (0) | 2023.02.24 |
[개발용어] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2023.02.16 |
[Typescript] Decorator(데코레이터) (0) | 2023.02.05 |
[js] duck typing(덕 타이핑) with typescript (0) | 2023.02.05 |
댓글