본문으로 바로가기

유니코드와 한글의 영역

category 🤖 ML/🔠 NLP 2021. 5. 31. 03:43

유니코드

유니코드란 전세계의 문자를 정의하기 위한 국제 표준 코드다. 

유니코드 문자의 경우 해당 글자의 코드를 표기할 때 U+(16진수 숫자)로 표기한다. 

한글 '가'는 AC00(0xAC00)이고, 유니코드 상에선 U+를 붙여 AC00으로 표현한다. 10진수로 표현하면 44032다. 

 

js에선 charCodeAt 메서드를 통해서 10진수의 유니코드를 출력해볼 수 있다. toString을 통해 16진수로 변환할 수도 있습니다.

console.log("가".charCodeAt(0)) // 44032
console.log("가".charCodeAt(0).toString(16)) // ac00

console.log("A".charCodeAt(0)) // 65
console.log("A".charCodeAt(0).toString(16)) // 41

 

 

유니코드 테이블

 

유니코드 U+(Y)YYYX 에 X를 칸을 의미한다. 칸은 0번부터 시작한다.

예를 들어 A의 경우 U+0041에 해당하고, 0040의 행에 1번째 칸을 의미한다.

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_0000~0FFF

 

유니코드 평면

물론 테이블만으로 유니코드를 구획하는 것은 너무 방대하기 때문에, 유니코드 평면이라는 개념이 있다.

SMP, SIP 등은 할당되어 있긴 하지만 빈칸이 많고, 사실상 사용되는 거의 모든 문자가 BMP에 꽉꽉 눌러 담겨져 있다.

당연히 한글도 다국어 기본 평면(BMP)에 속합니다.

다국어 기본 평면(BMP)를 살펴보면, CJK 문자 (중/일/한)의 영역이 있음을 확인할 수 있습니다.

 

 

유니 코드 상에서의 한글의 블록

일단은, 크게 3 블록이 존재합니다.

Hangle Syllables

Hangul Jamo

Hangul Compatibility Jamo

 

 

(1) 완성형 문자의 영역(Hangle Syllables)

 

Hangul Syllables는 완성형 문자를 다루고 있다.

한글은 총 11,172개의 완성형 문자가 존재하므로 AC00('가')부터 D7A3('힣')까지 존재한다. 

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_A000~AFFF

정규식에서 /[가-힣]/ 이 조합된 한글 모두와 매칭되는 것(낱개의 자음, 모음은 일치 하지 않음) 은 위와 같은 유니코드 상의 한국어 배치 때문입니다.

 

* 한글 자모, 완성형 한글 전부, 즉, 한글이냐를 정규식으로 판단하기 위해서는 /[ㄱ-ㅎ가-힣]/ 를 사용합니다.

 

 

 

(2) 한글 자모의 영역(Hangul Jamo)

 

Hangul Jamo는 문자의 초, 중, 종성에 해당하는 문자를 가지고 있습니다.

0x1100 ~ 0x11FF 영역에 

 

주의할 점은, 같은 문자일지라고 할지라도 초성, 종성을 구별합니다. 

ㄱ을 예로 들자면, U+1100은 초성으로서의 ㄱ이며 U+11A8은 종성입니다.

즉, 같은 'ㄱ'인데도 초성이냐, 종성이냐를 구분한다는 것입니다. 

 

https://en.wikipedia.org/wiki/Hangul_Jamo_(Unicode_block)

 

 

(3) Hangul Compatibility Jamo의 영역

 

초, 중, 종성 구분 없이 'ㄱ'을 문자 그대로의 'ㄱ'으로 인식하는 부분이 유니코드의 U+3130 ~ U+318F 상에 존재합니다.

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_3000~3FFF

 

실제로 문자 ㄱ의 유니코드를 출력해보면 3131을 반환합니다.

console.log("ㄱ".charCodeAt(0).toString(16)) // 3131
console.log("ㄱ".charCodeAt(0)) // 12593

 

 

Conclusion

이 외에도 유니코드 상 Hangul Jamo Extended-A, Hangul Jamo Extended-B 같은 것들이 존재하긴 하지만 일반적으로는 이용되지 않는 것으로 보입니다.

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체