본문 바로가기
프로그래밍/운영체제

유니코드와 아스키코드(SBCS, MBCS, WBCS)

by Hwan2 2019. 12. 11.
728x90
반응형

원래 코드를 짜면 일반적으로 영문, 숫자를 아스키코드로 컴퓨터는 인식합니다.


따라서 


1
2
3
char c = 65;
 
printf("%c", c);    //output : A
cs


이런식으로 가능합니다.


이는 아스키코드를 사용해 문자든 숫자든 1바이트로 표현하기 때문인데, 


1바이트는 8비트로0 ~ 256까지의 가지수를 표현할 수 있습니다.


하지만 아스키코드는 7비트만 사용합니다.


그 이유는 맨 앞의 1비트는 에러검출을 위해 사용하기 때문이죠.


이렇게 말이죠....


하지만 시대가 발전하면서 다른 여러 나라들(한국, 일본, 중국, 아랍, 인도 등....)도 컴퓨터를 많이 사용하기


시작했고 그로인해 다른나라의 언어도 표현해야 했습니다.


하지만 1바이트로 문자를 표현하는 것은 자리가 없어서 2바이트로 표현하기로 합니다.


그래서 탄생한 것이 유니코드입니다.


유니코드는 2바이트로 표현이 가능하기 때문에 비트수는 16비트, 가지수는 65536개.


따라서 여러나라의 문자가 표현이 가능해짐니다.



유니코드 평면도입니다.


중간에 연분홍색으로 색칠되어 있는 구간이 한국, 중국, 일본이 사용하고 있는 구간인데,


절반정도를 차지하고 있는걸 알 수 있습니다.


그만큼 다양한 언어조합이 가능하단 뜻이겠죠.....




코드에서도 사용이 가능한데, 그전에 SBCS, MBCS, WBCS를 알고 가야합니다.



SBCS(Single Byte Character Set)의 약자로 단일 바이트를 표현한다는 뜻입니다.


즉, 아스키코드가 되고 일반적으로 코딩할 때 사용되는 녀석입니다.




MBCS(Multi Byte Character Set)의 약자로 영문은 1바이트로, 한글과 한자는 2바이트로 처리하는 녀석입니다.


언듯보면 좋아보이지만 문제가 있습니다.


한글과 숫자 혹은 영어가 섞여있는 경우인데,


이렇게되면 문자열 처리과정이 까다로워집니다.


1
2
3
char  c[] = "안녕abc";
 
printf("%d\n"sizeof(c));

//output : 8
cs


문자열 길이는 5인데 크기는 8을 반환하고 있습니다.(\n 포함)


strlen으로 길이를 구해봐도 7로 나옵니다.(\n 미포함)


따라서 문자열 처리하는 과정이 까다로워 짐니다.





WBCS(Wide Byte Character Set)의 약자로 모든 문자를 2바이트로 처리합니다.


숫자, 영어, 한글, 중국어, 일본어 등.....


때문에 유니코드는 WBCS에 해당하게 됩니다.


혹시나 아스키코드는 1바이트고 유니코드는 2바이트니깐 속도나 메모리적인 측면에서 안좋지 않나?


라고 생각하실 수도 있지만, 속도와는 무과하고 요즘같이 하이테크놀리지 시대엔 전혀 문제될 것이 없습니다.



다음은 Windows 프로그래밍에 있어서 가장 중요한 <tchar.h>에 대해 말씀드리겠습니다.

반응형

댓글


스킨편집 -> html 편집에서