본문 바로가기

C, C++/뇌를 자극하는 윈도우즈 시스템 프로그래밍

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 2장. 아스키코드 vs 유니코드

https://basaeng.tistory.com/3

 

컴퓨터로 문자를 표현하는 법

개요컴퓨터는 언제나 0과 1만 인식할 수 있다. 모든 문자는 이진수로 변환되어 저장되고 이진수가 다시 문자로 변환되어 우리에게 보이게 된다. 이 과정을 문자 인코딩, 문자 디코딩이라고 한

basaeng.tistory.com

전에 포스팅 했던 내용 처럼 컴퓨터로 문자를 표현하는 법은 여러가지 방법으로 발전해왔다.

 

C에서는 ASCII, UNICODE 같은 다양한 문자 인코딩 방식에 대응하도록 프로그래밍할 수 있다.


Character Set 표현방법

SBCS(Single Byte Character Set)

문자를 표현할 때 1바이트를 사용하는 방식이다.

 

MBCS(Multi Byte Character Set)

문자를 표현할 때 1~2바이트를 사용하는 방법이다.

영어처럼 기존의 문자는 1바이트, 한글과 같은 언어는 2바이트로 표현한다.

 

WBCS(Wide Byte Character Set)

모든 문자를 2바이트를 사용해 표현하는 방식이다.

유니코드 기반 문자열은 이 WBCS기반 문자열이다.

 

MBCS -> WBCS

MBCS는 효율적으로 데이터를 표현하지만 C에서 str계열 함수 등 영어는 1바이트 다른 언어는 2바이트로 처리하는 경우 등 코드를 만들 때 신경써야 할 부분들이 많다.

현대 프로그래밍에서는 MBCS에서 가져올 수 있는 메모리 상 이점보다, 전세계 언어를 일관되게 지원해 개발의 편의성을 높여주는 WBCS 방식을 많이 사용한다. 

 


WBCS 프로그래밍

레거시 프로그램들은 MBCS를 사용하는 경우도 있기 때문에 코드를 작성할 때 MBCS와 WBCS를 모두 지원할 필요가 있다.

이를 위해 C에서는 _UNICODE가 정의되었는지에 따라 MBCS, WBCS 방식을 선택해서 사용할 수 있도록 함수들이 만들어져있다. 

 

#ifdef _UNICODE
#define _tprintf wprintf
#else
#define _tprintf printf
#endif

 

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/using-generic-text-mappings?view=msvc-170

 

일반 텍스트 매핑 사용

C 런타임의 데이터 형식, 루틴 및 기타 개체에 대한 Microsoft 관련 매핑을 소개합니다.

learn.microsoft.com

 

 

따라서 앞으로 유니코드 방식을 지원하기 위해 _t 계열 함수를 사용하도록 하자.

 

main또한 _tmain으로 선언하면 프로그램 실행 시 전달되는 인자 argv를 유니코드 형태로 받을 수 있다.