Unicode
서로 다른 문자에 고유 번호를 할당하는 테이블
# 코드 포인트
코드 포인트 문자에 할당된 고유 번호
크기
0x10FFFF (약 110만) 까지 코드 포인트가 정의되어 있음 (0xFFFF(65,536)가 17개)
- 현재 80만 개 정도 여유가 있음
코드 포인트를 작성하는 규칙
- 접두사
U+
: unicode 임을 나타냄 - 뒤에는 16진수로 코드 포인트 번호 표현
locale 의존
- 같은 코드 포인트도 locale에 따라 보여지는게 다름
extended grapheme clusters
코드포인트 여럿이 모여 하나의 문자(이모지)를 나타냄
# surrogate pairs
UCS-2
- 65,536 문자를 표현하기 위한 2바이트의 고정 길이 인코딩
- UTF-16 의 원버전
surrogate pair
- 단일 유니코드 코드 포인트를 인코딩하는 데 사용되는 두 개의 UTF-16 단위
- 상위 6비트를 마스킹
- ℹ️ unicode 에서 U+D800 ~ U+DFFF 는 surrogate 영역으로 할당됨
- 상위 surrogate
- 상위 1101_10 마스킹
- 범위: U+D800 ~ U+DBFF
- 하위 surrogate
- 상위 1101_11 마스킹
- 범위: U+DC00 ~ U+DFFF
코드 포인트 구하기
- 마스킹하고 남은 상위 4비트에서 +1
example
- 두 개의 UTF-16:
D83D DCA9
- 상위, 하위 surrogate 를 마스킹 하고 남은
3D
,A9
- (1101_10)00 0011_1101, (1101_11)00 1010_1001
- 0000 1111 0100 1010 1001 -> 0001 1111 0100 1010 1001
- 단일 유니코드 코드 포인트:
U+1F4A9
상위 utf-16 | 하위 utf-16 | code point |
---|---|---|
U+FFFF | U+FFFF | |
U+D800 | U+DC00 | U+10000 |
U+D83D | U+DCA9 | U+1F4A9 |
U+DBFF | U+DFFF | U+10FFFF |