컴퓨터공학 - 문자열
유니코드 인코딩 방식
UTF-8과 UTF-16
유니코드는 무엇인가 ?
유니코드(Unicode)는 유니코드 협회(Unicode Consortium)가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준입니다.
그 종류 - > (ISO 10646문자집합, 문자인코딩, 문자정보 데이터베이스, 문자를 다루기 위한 알고리즘)
기본적으로 유니코드의 목적은 현존하는 문자 인코딩 방법을 모두 유니코드로 교체하는 겁니다.
인코딩(부호화)이란?
인코딩이란 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것입니다.
이 신호를 입력하는 인코딩과 문자를 해독하는 디코딩
을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 합니다.
이렇게 인코딩과 디코딩의 기준을 문자열 세트 또는 문자셋(charset)
이라고 합니다.
이 문자셋의 국제 표준이 유니코드입니다.
ASCII 문자는 무엇인가요?
영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7 비트로 모든 영어 알파벳
을 표현할 수 있습니다.
52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함합니다.
유니코드는 ASCII를 확장한 형태입니다.
UTF-8과 UTF-16의 차이점은 무엇인가요?
UTF-8과 UTF-16은 인코딩 방식의 차이를 의미합니다.
UTF-8은 Universal Coded Character Set + Transformation Format – 8-bit의 약자로,
UTF- 뒤에 등장하는 숫자는 비트(bit)입니다.
- UTF-8 특징: 가변 길이 인코딩
UTF-8은 유니코드 한 문자를 나타내기 위해 1 byte(= 8 bits)에서 4 bytes까지 사용합니다.
-
원리
코
라는 문자의 유니코드는 U+CF54 (16진수, HEX)로 표현됩니다.
이 문자를 이진법(binary number)으로 표시하면, 1100-1111-0101-0100 이 됩니다.
이 문자를 UTF-8로 표현하면, 다음과 같이 3byte의 결과로 표현됩니다. -
규칙
1바이트의 문자 : 제일 앞을 0으로 한다. EG) 01000001
2바이트의 문자 : 첫 번째에는 110, 두 번째에는 10으로 한다. EG)11000110 10110010
3바이트의 문자 : 첫 번째에는 1110, 두번째와 세번째는 10으로 한다.
1110xxxx 10xxxxxx 10xxxxxx # x 안에 순서대로 값을 채워넣습니다.
11101100 10111101 10010100
[데이터] UTF-8로 표현된 '코'
let encoder = new TextEncoder(); // 기본 인코딩은 'utf-8'
encoder.encode('코') // Uint8Array(3) [236, 189, 148]
(236).toString(2) // "11101100"
(189).toString(2) // "10111101"
(148).toString(2) // "10010100"
[코드] '코'라는 문자를 UTF-8로 표현할 수 있습니다.
다음 예제는 b 라는 문자를 UTF-8로 인코딩한 결과입니다.
0xxxxxxx
01100010
[데이터] UTF-8로 표현된 'b'
encoder.encode('b') // Uint8Array [98]
(98).toString(2) // "1100010"
[코드] 'b'라는 문자를 UTF-8로 표현할 수 있습니다.
UTF-8은 ASCII 코드의 경우 1 byte, 크게 영어 외 글자는 2byte, 3byte, 보조 글자는 4byte를 차지합니다. 이모지는 보조 글자에 해당하기 때문에 4byte가 필요합니다.
-
UTF-8 특징: 바이트 순서가 고정됨
UTF-16에 비해 바이트 순서를 따지지 않고, 순서가 정해져 있습니다. -
UTF-16 특징: 코드 그대로 바이트로 표현 가능, 바이트 순서가 다양함
UTF-16은 유니코드 코드 대부분(U+0000부터 U+FFFF; BMP) 을 16 bits
로 표현합니다.
- 대부분에 속하지 않는 기타 문자는 32 bit(4 bytes)로 표현하므로 UTF-16도 가변 길이라고 할 수 있으나, 대부분은 2 바이트로 표현합니다
U+ABCD라는 16진수를 있는 그대로 이진법으로 변환하면 1010-1011-1100-1101 입니다. 이 이진법으로 표현된 문자를 16 bits(2 bytes)로 그대로 사용하며, 바이트 순서(엔디언)에 따라 UTF-16의 종류도 달라집니다.
UTF-8에서는 한글은 3 바이트, UTF-16에서는 2 바이트를 차지합니다.
Author And Source
이 문제에 관하여(컴퓨터공학 - 문자열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jelkov/컴퓨터공학-문자열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)