[TIL : 41] 아스키코드와 유니코드, 비트맵과 벡터

jabae·2022년 5월 1일
0

TIL

목록 보기
41/44

💬 문자열

아스키코드(ASCII)

영문 알파벳을 사용하는 대표적인 문자 인코딩으로, 7bits(2^7=128)로 모든 영어 알파벳, 숫자, 제어문자 등을 표현할 수 있다. 아스키 코드는 영문자만을 표현할 수 있으므로 영어가 아닌 언어를 표현할 수 없다. 그래서 전 세계 언어의 문자를 정의하기 위해 유니코드라는 국제 표준 코드가 등장하게 되었다.

❓아스키코드의 1bit는 어디로 갔을까?
아스키코드는 1바이트(8비트) 중 7비트만 사용한다. 남은 1비트는 패리티 비트(parity bit)라고 하며, 통신에러 검출을 위해 사용한다.

유니코드(Unicode)

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업표준이다. 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 다루기 위한 알고리즘 등을 포함하고 있다. 유니코드는 아스키코드 보다 확장된 형태로 16bits(2^16=65536)을 사용한다.

인코딩(Encoding, 부호화)
어떤 문자, 기호를 컴퓨터가 이해할 수 있는 신호로 만드는 것

디코딩(Dcoding)
부호화된 정보를 해독하는 것, 바이트 형식을 문자(문자열)로 바꾸는 것이 이에 해당됨

문자셋(charset)
인코딩과 디코딩은 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 한다. 이 기준을 문자셋(charset)이라고 한다. 문자셋의 국제표준이 유니코드이며, 대표적으로 ASCII, ANSI, ISO-8859-1, UTF-8 등이 있다.

UTF-8과 UTF-16

UTF-8과 UTF-16은 유니코드의 인코딩 방식이다. Universal Coded Character Set + Transformation Format – 8 또는 16bit의 약자로, UTF- 뒤에 등장하는 숫자는 비트(bit)를 나타낸다.

UTF-8

가변길이 인코딩 방식으로 유니코드 한 문자를 나타내기 위해 1바이트(8비트)~4바이트까지 사용한다. 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다. 아스키 방식과 호환되어 1바이트로 표현할 수 있는 문자는 1바이트로 표현해 저장소의 낭비를 막을 수 있다. ASCII코드는 1바이트, 영어 외 글자는 2~3바이트, 보조글자(이모지)는 4바이트를 차지한다. UTF-16에 비해 바이트 순서를 따지지 않고, 순서가 고정되어 있다.

UTF-16

유니코드의 대부분(U+0000부터 U+FFFF; BMP)을 2바이트(16비트)로 표현한다. 그 대부분에 속하지 않는 문자는 4바이트(32비트)에 표현되기도 한다. 바이트 순서(엔디언)에 따라 UTF-16의 종류가 달라진다.

바이트 순서(엔디언, endian)
컴퓨터는 데이터를 메모리에 저장할 때 바이트 단위로 나누어 저장한다. 대게 4바이트나 8바이트로 구성되는데, 이렇게 연속된 바이트를 순서대로 저장하는 것을 바이트 순서(Byte order)라고 한다. 바이트가 저장되는 순서는 다음과 같다.

  • 빅 엔디안(big endian)
    낮은 주소에 데이터의 높은 바이트부터 저장하는 방식으로, 평소 우리가 숫자를 사용하는 선형 방식과 같다. 따라서 메모리에 저장된 순서 그대로 읽을 수 있고 이해하기 쉽다. 데이터의 각 바이트를 배열처럼 취급할 때 적합하다.
  • 리틀 엔디안(big endian)
    낮은 주소에 데이터의 낮은 바이트부터 저장하는 방식으로, 우리가 숫자를 사용하는 방식과 반대로 거꾸로 읽어야 한다. 물리적으로 데이터를 조작하거나 산술 연산을 수행할 때 효율적이다. 대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장한다.

현재 우리가 사용하는 대부분의 시스템은 인텔 기반의 윈도우이므로 리틀 엔디안 방식을 사용하고 있다. 하지만 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식이 사용된다.

❓BOM(Byte Order Mark)
Byte Order Mark란, 유니코드가 little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록 문서의 가장 앞에 2~3바이트의 문자열을 추가하는 것을 말한다. 매직넘버로 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보인다. 아래 표와 같이 UTF-16은 리틀엔디언과 빅엔디언으로 나눠져 있는 것을 알 수 있다.

🤔 한글은 얼마만큼의 바이트를 사용할까? UTF-8에서는 3바이트, UTF-16에서는 2바이트를 차지한다.

🖼 그래픽

비트맵과 벡터 이미지의 차이

비트맵(래스터)벡터
기반 기술픽셀수학적으로 계산된 shape
특징사진과 같이 색상의 조합이 다양한 이미지에 적합로고, 일러스트와 같이 제품에 적용되는 이미지에 적합
확대확대에 적합하지 않음, 이미지 깨짐품질 저하 없이 모든 크기로 확대 가능, 해상도의 영향을 받지 않음
크기에 따른 파일 용량큰 크기의 이미지 큰 파일 사이즈사이즈가 커진 벡터 그래픽이어도 작은 파일 사이즈 유지 가능
상호 변환이미지의 복잡도에 따라 벡터로 변환이 오래 걸림쉽게 래스터 이미지로 변환 가능
대표 파일 포맷jpg, gif, png, bmp, psdsvg, ai
웹에서의 사용성jpg, gif, png 등이 널리 쓰임svg 포맷은 현대의 브라우저에서 대부분 지원

📚 참고

profile
it's me!:)

0개의 댓글