문자 집합 (Character Sets)

윤찬호·2023년 2월 18일
0

문자 집합(character set)은 컴퓨터에서 문자를 표현하는 데 사용되는 일련의 코드로 문자와 이에 해당하는 숫자 코드 간의 매핑 방식을 정의한다. 즉, 문자를 컴퓨터가 이해할 수 있는 이진 데이터로 변환하는 규칙을 제공한다.

종류와 특성

SBCS

SBCS(Single Byte Character Set)는 1바이트로 문자를 표현하는 문자 집합이다. ASCII 문자 집합을 기반으로 만들어졌다. SBCS는 주로 컴퓨터 시스템의 호환성 유지를 위해 사용된다.

ASCII

7bit로 영문자, 숫자, 특수문자, 기호 등 128개 문자를 표현할 수 있다.
1bit는 Parity Bit로 통신 에러 검출을 위해 사용된다.

ANSI

8bit로 구성되어 있으며 256개의 문자를 표현할 수 있다. (ASCII의 확장판)
ANSI의 앞 7bit는 ASCII와 동일하고, 뒤에 1bit를 이용하여 다른 언어의 문자를 표현한다.
새로 추가된 128개 문자(뒤에 1bit)로는 모든 언어의 문자를 표현할 수 없다. 그래서 생긴 개념이 CodePage이다.

ANSI = ASCII(7bit) + CodePage(1bit)

CodePage
각 언어별로 Code값을 주고, Code마다 다른 문자열 표를 의미하도록 약속한 것.
영어 외 다른 언어를 사용할 경우 ANSI는 CodePage를 동일하게 맞춰야 한다. CodePage가 다를 경우 의도와 다른 결과가 나올 수 있으며 다국어 지원을 위해 CodePage 정보를 미리 알고 있어야 한다.

장점
SBCS는 간단하고 빠르게 문자열 처리를 수행할 수 있으며, 메모리와 디스크 공간을 절약할 수 있다.

단점
다국어를 지원하지 않기 때문에 다국어를 처리하는 데 적합하지 않다.

MBCS

MBCS(Multi Byte Character Set)는 한 문자를 표현하는 데 1바이트 이상을 사용한다. 문자당 여러 개의 바이트를 사용하기 때문에 다국어 문자 집합을 지원할 수 있다.

대부분 2바이트를 사용하기 때문에 DBCS(Double Byte Character Set)라고도 부른다. 이론상으로 MBCS는 3바이트 이상의 문자도 포함할 수 있다.

MBCS는 SBCS보다 복잡하고 느리지만, 다국어를 처리할 수 있기 때문에 한국어(EUC-KR), 일본어(Shift-JIS), 중국어(GB2312)를 표현하기 위해 많이 사용된다.

한국어 표현
영문은 1바이트, 한글은 2바이트를 사용하여 표현한다.
'ABCD한글'은 총 6글자 이지만 한글 한 글자는 2바이트를 사용하여 표현하기 때문에 문자열의 길이는 8이 된다.

MBCS는 다양한 언어를 지원할 수 있지만, 문자열 처리에서 오류가 발생할 수 있다.

  • 국가간의 호환이 되지 않는 방식이기에 다른 시스템으로 보내면 글자가 깨진다.

  • 문자열의 길이를 계산할 때 한 문자가 1바이트 이상일 수 있기 때문에 문자열의 길이를 정확히 계산하기 어렵다.

  • MBCS를 사용하는 경우 문자열 처리에 주의할 사항이 많기 때문에 프로그래밍 복잡성이 증가한다.

호환성 문제

Microsoft Windows의 경우 유니코드를 지원하지 않았던 Windows 9x와의 호환성을 위해 여전히 MBCS를 기본 인코딩으로 사용한다.
UTF-8이나 UTF-16에 BOM(바이트 순서 표식) 문자가 없으면 무조건 MBCS로 읽어들이는 프로그램들이 존재하기 때문에 Windows용 프로그램들은 UTF-8로 저장 시 BOM을 붙이는 경우가 많은데, 이는 BOM이 없는 UTF-8을 사용하는 타 운영체제에서 인코딩 오류를 일으키게 된다.

UTF-8을 기본 인코딩으로 도입한 macOS나 2000년대 이후의 리눅스 등은 기본적으로 텍스트 파일을 단일 인코딩으로 읽어들이기 때문에 MBCS 형태로 작성된 텍스트 파일은 별도의 처리를 하지 않는 한 전부 �로 보인다.

Windows10 19H1 빌드부터 메모장에서 BOM없는 UTF-8을 기본 인코딩으로 사용하도록 바뀌었다. 이전까지는 UTF-8 저장 시 무조건 BOM을 붙였다.

위와 같은 문제점으로 인해 최근에는 유니코드를 사용하여 다국어를 처리하는 것이 일반적이다.

DBCS

DBCS(Double Byte Character Set)는 2바이트 이상의 다중 바이트 문자를 사용하는 문자 집합이다. SBCS와 MBCS의 한계를 극복하기 위해 나온 방식으로, 한글, 중국어, 일본어와 같은 문자열 처리에 사용된다.

DBCS는 MBCS와 유사하지만, 한 문자를 표현하기 위해 2바이트 이상을 사용하며, 모든 문자가 같은 길이의 바이트를 사용하지 않는다. 문자당 사용하는 바이트 수가 고정되어 있지 않아 SBCS나 MBCS보다 복잡하고 느릴 수 있다.

이러한 문제점으로 인해 유니코드를 사용하는 것이 일반적이다.

WBCS

WBCS(Wide Byte Character Set)는 한 문자를 표현하기 위해 2바이트를 사용하는 문자 집합이다. MBCS와 달리, 모든 문자가 같은 길이의 바이트를 사용하기 때문에 문자열 처리에서 발생할 수 있는 문제점을 해결할 수 있다.

WBCS는 주로 유니코드(Unicode)를 기반으로 하며, 다양한 언어와 문자를 지원할 수 있다. 유니코드는 전 세계의 모든 문자를 표현하기 위한 국제 표준이며, WBCS는 유니코드를 사용하여 다국어 문자열을 처리하기 위한 방법 중 하나이다.

WBCS는 여러 개의 바이트를 사용하기 때문에, SBCS보다는 더 복잡하고 느리지만, 다양한 언어와 문자를 지원할 수 있어 현대의 다국어 시스템에서 많이 사용된다. WBCS를 사용하면 한 문자당 사용하는 바이트 수가 고정되어 있기 때문에 문자열 처리가 더 간단해집니다.

WBCS는 다국어를 처리하는 데에는 적합하지만, 바이트 수가 크기 때문에 메모리와 디스크 공간을 많이 사용한다. 다국어를 처리하지 않는 시스템에서는 SBCS나 MBCS를 사용하는 것이 더 효율적일 수 있다.

대표적인 WBCS로는 UTF-8, UTF-16 등이 있다. UTF-8은 8비트로 문자를 표현하고, UTF-16은 16비트로 문자를 표현한다. 또한 바이트 순서를 지정하는 방법에 따라서 Big-Endian과 Little-Endian으로 나뉜다.

유니코드

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰수 있도록 설계된 표준이다.

숫자와 글자, 키와 값이 1:1로 매핑된 형태의 코드로 전 세계의 모든 문자를 특정 숫자(키)와 1:1로 매핑한 것이다.

UTF-8, UTF-16은 유니코드를 사용하는 인코딩 방식이다.
인코딩 방식은 유니코드표의 숫자(키)를 어떻게 표현하느냐에 따른 방식이다.

  • UTF-8은 'A'를 0x41로 표현한다.
  • UTF-16은 'A'를 0x0041로 표현한다.

'U+' 접두어가 붙어 있으면 유니코드 라는 의미이다.



참고
https://blog.hexabrain.net/217
https://norux.me/31

0개의 댓글