[CS] 문자열

hzn·2022년 11월 30일
0

etc

목록 보기
4/13
post-thumbnail

문자열

  • 2010년 이후, 유니코드라고 불리는 인코딩 방식으로 통일됨

유니코드

  • 유니코드 협회(Unicode Consortium)가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
  • (인코딩과 디코딩의 기준이 되는) 문자셋의 국제 표준
  • ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 다루기 위한 알고리즘 등을 포함.

유니코드가 탄생하기 이전에는, 같은 한글이 적힌 텍스트 파일이라도 표현하는 방법이 제각각이었다. 어떤 파일이 지원하지 않는 다른 인코딩 형식으로 저장되어 있는 경우에는 파일을 제대로 불러올 수 없었다. 기본적으로 유니코드의 목적은 현존하는 문자 인코딩 방법을 모두 유니코드로 교체하는 것이다.

인코딩(부호화)이란?

  • 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것.
  • 이 신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 한다.
  • 인코딩과 디코딩의 기준을 문자열 세트 또는 문자셋(charset)이라고 한다.
  • 이 문자셋의 국제 표준이 유니코드.

ASCII 문자

  • 영문 알파벳을 사용하는 대표적인 문자 인코딩
  • 7 비트로 모든 영어 알파벳을 표현
  • 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함.
  • 유니코드는 ASCII를 확장한 형태.

인코딩 방식 : UTF-8과 UTF-16

1. UTF-8 : 가변 길이 인코딩 / 바이트 순서가 고정됨

  • Universal Coded Character Set + Transformation Format – 8-bit
  • 유니코드 한 문자를 나타내기 위해 1 byte(= 8 bits)에서 4 bytes까지 사용하는 인코딩 방식 (길이 가변적)
  • UTF-16에 비해 바이트 순서를 따지지 않고, 순서가 정해져 있다
  • 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다. (사용된 문자 종류에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문. 만약 ASCII 문자인 경우 1 바이트만으로 표현 가능하므로)
  • UTF-8은 ASCII 코드의 경우 1 byte, 대체로 영어 외 글자는 2byte, 3byte, 보조 글자(이모지 등)는 4byte를 차지한다.

원리

ex 1) '코'라는 문자를 UFT-8로 표현

  • 라는 문자의 유니코드는 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"

ex 2) 'b'라는 문자를 UFT-8로 표현

  • ASCII 코드는 7비트로 표현되고, UTF-8에서는 다음과 같이 1 byte의 결과로 만들 수 있다.
0xxxxxxx
01100010 
encoder.encode('b') // Uint8Array [98]
(98).toString(2) // "1100010"

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

0개의 댓글