본문 바로가기
개발/그 외

문자열

by 안뇽! 2021. 10. 25.
반응형

https://steemit.com/kr-dev/@wonnieyoon/computer-information

유니코드

유니코드는 전 세계의 모든 문자를 컴퓨터에서 동일하게 사용하도록 설계된 산업 표준이다.

ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 다루기 위한 알고리즘 등을 포함한다.

인코딩(부호화)

어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것.
인코딩(반대는 디코딩)의 기준을 문자셋(charset)이라고 하는데, 문자셋의 국제 표준이 유니코드이다.

ASCII

영문 알파벳을 사용하는 대표적 문자 인코딩으로 7 비트로 모든 영어 알파벳을 포현할 수 있다.
52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함한다.

유니코드는 ASCII를 확장한 형태이다.

UTF-8과 UTF-16

UTF-8과 UTF-16은 인코딩방식의 차이이다.

UTF-8 특징 :

  • 1 가변 길이 인코딩

UTF-8은 유니코드 한 문자를 나타내기 위해 1byte(=8bits)부터 4bytes까지 사용한다.

  • 원리

    예를 들어, 코 라는 문자의 유니코드는 U+CF54 (16진수, HEX)로 표현된다. 이 문자를 이진법(binary number)으로 표시하면, 1100-1111-0101-0100 이 된다. 이 문자를 UTF-8로 표현하면, 다음과 같이 3byte 의 결과로 표현된다.

    //1110xxxx 10xxxxxx 10xxxxxx x 안에 순서대로 값을 채워넣는다.
    //11101100 10111101 10010100
    

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"

encoder.encode('b') // Uint8Array [98]
(98).toString(2) // "1100010"

```

이처럼 UTF-8은 1byte에서 4bytes까지의 가변 길이를 가지는 인코딩 방식이다. 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다.
문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문이다.
UTF-8은 ASCII 코드의 경우 1 byte, 크게 영어 외 글자는 2byte, 3byte, 보조 글자는 4byte를 차지한다. 이모지는 보조 글자에 해당하기 때문에 4byte가 필요하다.

  • 2 바이트 순서가 고정된다.

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 바이트를 차지한다.

반응형