멀티바이트코드

정경섭·2023년 5월 3일
0

표준

MicroSoft에서 만든 표준
세계표준으로 합의가 이루어지지 않은 윈도우에서 개발된 코드

Character Set

MBCS : Multi Byte Character Set

MBCS 란?

SBCS와 DBCS를 묶어놓은 문자세트를 의미
DBCS의 문자세트에는 거의 SBCS의 문자가 포함되므로,
우리가 말하는 DBCS는 사실은 주로 MBCS를 의미함

DBCS 란?

DBCS는 하나의 문자세트에 부여된 글자값이 두 바이트
즉 0-65535의 범위 내에 있음을 말함
이는 원래의 8비트에서 또 다른 8비트를 단순히 확장한 것
DBCS는 8비트로 처리할 수 없을 정도로 문자의 종류가 많은 중국, 한국, 일본 그리고 대만 등에서 주로 사용
ANSI, UTF-8 포함

ANSI(American National Standard Institute)

ANSI는 8bit로 구성되어 있으며 256개의 문자를 표현할 수 있음
ANSI는 ASCII의 확장판 : 그 이유는 ASCII에서 1bit를 더 사용한 것이기 때문
ANSI의 앞 7bit는 ASCII와 동일하고, 뒤에 1bit를 이용하여 다른 언어의 문자를 표현
그런데 새로 추가 된 128개 문자로는 모든 언어의 문자를 표현할 수 없음.
그래서 생긴 개념이 CodePage 임.
각 언어별로 Code 값을 주고, Code마다 다른 문자열 표를 의미하도록 약속을 함.
쉽게 생각하면 아래와 같이 설명할 수 있음.
ANSI = ASCII(7bit) + CodePage(1bit)
코드페이지는 아래서 설명.

Byte 크기
한글 : 2Byte
영어 : 1Byte

장점
멀티바이트 문자 집합은 특정 문자 집합마다의 코드페이지가 존재하여
영어 이외의 나라 문자 표현 가능

코드 페이지란? (Code Page)

마이크로소프트 테크넷에 게재된 각종 컴퓨터용 코드
특정 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM 용어
문자 인코딩 테이블은 0부터 255까지의 정수를 표현하는
단일 옥텟(Octet, 바이트)이라고 불리는 일련의 비트들이 특정한 문자와 결합하여 도표화(Mapping)한 것

코드페이지 한글 KSC5601 예)
문자세트의 처음 부분인 0x00부터 0x7E 까지는 ASCII와 동일
이러한 배열은 중국, 일본, 대만에도 마찬가지며 나중에 설명할 Unicode에서도 마찬가지 DBCS의 첫 번째 바이트 = 리딩 바이트(Leading Byte)
DBCS의 두 번째 바이트 = 트래일링 바이트(Trailing Byte)
첫 번째 128 문자는 ASCII로 되어있고 나중 128 문자는 각 언어마다 다르게 지정되어있음

단점
ASCII를 제외하고는 각 DBCS들이 모두 다른점이 단점

예)
흔히 사용하는 strlen()는 MBCS에서 더 이상 직접 사용할 수가 없음
즉, strlen()은 문자의 수를 반환하게 되는데,
SBCS에서는 문자의 수가 바이트 수와 일치하므로 strlen()의 반환값은
사실 해당 문자가 차지하는 바이트의 숫자일 수도 있음
하지만 MBCS에서는 문자의 수와 그 문자가 차지하는 바이트의 수는 나라의 언어마다 값이 다르므로
strlen()으로 문자의 수를 계산할 수 없음

I/O에 연관된 문자의 처리에 해당되는 프로그램의 모든 로직을 일일이 DBCS와 SBCS을 염두에 두고 개발해야함
자칫 실수하면 프로그램상의 BUG(버그 또는 오류)를 가져오는 요인이 됨
MBCS를 사용하면 프로그램상의 난이도가 늘어나게됨

변수
일반 문자열과 변수 사용

참고 : https://ikcoo.tistory.com/227

profile
Keep Building

0개의 댓글