본문으로 바로가기

자바스크립트의 유니코드

category JavaScript 2021. 1. 13. 16:09

유니코드

유니코드는 문자나 기호, 숫자에 대응되는 코드로 이루어진 데이터베이스라고 생각할 수 있다

유니코드로
U+0041 는 A를
U+00A9 는 ©를
U+2603 는 ☃를
U+1F4A9 는 💩를 각각 가르킨다

이 유니코드들은 앞에 U+라는 것을 붙여서 유니코드 기호라는 것을 나타내고 뒤에 16진수 최소 4자리를 붙여서 표현한다

최소 4자리가 의미하는 바는 위의 4가지 코드들을 보고 눈치챘을지 모르겠지만 앞의 3개는 4자리로 뒤의 똥은 5자리로 표현되고 있는데

자주 쓰이는 4자리로 이루어진 코드들은 다국어 기본 평면(Basic Multilingual Plane) 또는 BMP이라고 불리고 그 범위 밖에 있는 것들은

아스트랄 평면들(astral planes)이라고 불린다

자바스크립트의 유니코드

자바스크립트에선 이 유니코드들을 어떻게 표현할까?

여러가지 방법이 있다

console.log('\u0041\u0042\u0043'); //ABC
console.log('\u0041\u0042\u0043'); //ABC

2가지 모두 유니코드로 문자열 ABC를 표현한 것

보면 알 수 있듯이 u와 16진수 4자리로 표현된 것을 알 수 있다

한가지 의아한 점은 4자리로 표현되고 있는데 그렇다면 5~6자리가 필요한 아스트랄 평면들에 존재하는 기호는 어떻게 표현해야할까?

에디터에서도 4자리까지만 유니코드로 인식하고 그 뒤의 자리는 인식조차 하지 않는다

한가지 표현방식이 더 있는데

es6에서 사용할 수 있는 유니코드 코드포인트 이스케이프를 사용하면 된다

console.log('\u{1F4A9}'); //💩

하지만 아스트랄 기호를 표현하기 위해서 내부적으로 두가지 유니코드들을 결합해서 사용하고 있기 때문에 사용하던 문자열들과 다르게 몇가지 문제점이 있는데

평소에 마주칠 수 있는 것들은 다음과 같다

console.log('\u{1F4A9}'.length); // 2
console.log('\u{1F4A9}'.split('').reverse().join('')); // ��

2가지 코드가 결합돼어 사용되기 때문에 우리가 보는 길이는 1이지만 2로 표현되며

뒤집으면 똑같은 문자가 나와야하지만 순서가 달라져서 기괴한 코드가 나오게되는 것

이 포스팅에서는 문제점을 짚는 것이지 해결하는 것이 주가 아니기에

해결 방법이 궁금하다면 매우 자세하고 친절한 설명과 해결법이 있는 블로그 를 가서 찾아보도록 하자

 

[Javascript] 유니코드 (Unicode) 이해하기

참고 : http://ujinbot.blogspot.kr/2013/10/blog-post.html 한글 자모 유니코드 : http://www.hipenpal.com/tool/characters-to-unicode-charts-in-korean.php?unicode=94 한글 글자 유니코드 : http://www.hipen..

tyboss.tistory.com

 

'JavaScript' 카테고리의 다른 글

Tagged templates  (0) 2021.01.23
다차원 배열 생성시 주의점  (0) 2021.01.21
논리 연산자  (0) 2020.12.24
if, else 줄이기  (2) 2020.12.23
비트 연산자  (0) 2020.12.19