하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.
1. SBCS (Single-byte Character Sets)
ASCII로 1~128까지 숫자를 표시하는 것 알고 계시죠? 그러니까 2^7만을 쓰는 거죠. 그런데 character 형은 아시다시피 1byte이고 따라서 1bit가 남게 됩니다.
예전 도스시절에 한글이 깨지면 보통 선문자나 유럽어의 움라우트가 불규칙하게 배열되는 것으로 알 수 있었습니다. 이런 선문자나 움라우트가 나머지 128개의 문자로서 채워지게 되는 거죠.
그래서 128+128 = 256 = 2^8 = 1 byte 가 되게 됩니다. 이때 마지막 한 비트는 음수를 표시하는 비트이고, 이 음수표시 비트가 1이 될 때, ASCII가 아닌 확장코드를 의미하게 됩니다.
2.MBCS (Multibyte Character Sets)
그런데 문제는 한글이나 한문 같은 경우는 128개로 표현할 수 없다는 점입니다.
그래서 2 character를 사용하게 됩니다. 아시다시피 도스환경이나 WAP같은 데서 보면 한글은 영문에 비해서 두 배의 넓이를 가지고 있습니다.(win에서는 거의 그런 경우가 없지만요. 이건 또 다른 문제입니다.)
위에서 설명드릴 때 음수표시 비트로 확장코드를 표시한다고 했었죠? MBCS의 경우에는 (음수)(음수) 로 표시하게 됩니다.
경우의 수를 따져보면,
(128 + 128) * (128 + 128)이니까,
= 128^2 + 2*128^2 + 128^2
이중에서 제일 마지막에 있는 항, 128^2이 MBCS를 표시하는 경우의 수죠.
한글이나 일어, 한문은 이런 방식으로 표시를 하게 되죠.
(참고로 제일 앞의 128^2는 ASCII 두 문자가 배열되는 경우의 수죠)
한글도스에서 일본어가 깨지고, 일본 도스에서 한국어가 깨지는 것은 각 나라마다, 각 코드마다 MBCS 규격이 다르기 때문입니다.
3. Unicode
이런 MBCS를 갖고는 범용적인 프로그램을 만들수 없습니다.( MSDN에 이렇게 나와있죠 ^^; )
어떤 프로그램들은 언어를 선택하는 부분이 있고, 언어를 선택하자마자 그 나라의 언어로 나오는데, 이런 프로그램들은 UNICODE를 쓰고 있다고 보시면 됩니다.
UNICODE는 256 * 256 = 65536의 문자 map를 사용합니다. 이것은 모든 언어의 모든 문자를 담을 수 있게 잡힌 거죠.
map은 ... 찾고 나서 보충해 드립죠.
MSDN을 참조하시려면,
MSDN -> visual studio 6.0 Docu -> visual C++ Docu -> Using visual c++ -> visual c++ programmer's guide -> run time library reference -> run time routines by category -> interntionalization 을 찾아보세요.
msdn없으면 온라인 msdn을 이용하세요.
http://msdn.microsoft.com/default.asp
///////////////////////////////////////////////////////////////////////////////////////////////
위 내용은 옛날 예적에 제가 저장해놓은 자료입니다.