문자셋관련 설명. [펌]


3가지 character type

Ascii == SBCS(single-byte character set) : 말 그대로 한 글자가 정확하게 1byte 길이로 이루어진 character들. 따라서 127 까지.



MBCS(multi-byte character set) : 한 글자가 1byte인 것들과 한 글자가 2byte인 것들(DBCS:double-byte)이 섞여 있다. 여기서 2byte인 것들은 double-byte 의 시작임을 표시하는 lead byte 와 한 글자의 뒷부분인 trail byte 로 나뉜다. 그럼 lead byte 인지 어케 알 수 있을까? lead byte 는 0x7f 값 이상. 즉 Ascii(127) 값보다 항상 크다는 특징이 있다. 그리구 trail byte 는 0이 아닌 아무 값이나 된다.



Unicode == wide characters : 한글자의 길이가 항상 2byte 이다.


* Unicode 3가지 주요 Encoding Form
UTF-8 : UTF-8 is popular for HTML and similar protocols.UTF-8 is a way of transforming all Unicode characters into a variable length encoding of bytes. It has the advantages that the Unicode characters corresponding to the familiar ASCII set have the same byte values as ASCII, and that Unicode characters transformed into UTF-8 can be used with much existing software without extensive software rewrites.


UTF-16 : UTF-16 is popular in many environments that need to balance efficient access to characters with economical use of storage. It is reasonably compact and all the heavily used characters fit into a single 16-bit code unit, while all other characters are accessible via pairs of 16-bit code units.


UTF-32 : UTF-32 is popular where memory space is no concern, but fixed width, single code unit access to characters is desired. Each Unicode character is encoded in a single 32-bit code unit when using UTF-32.

SBCS와 MBCS는 문자열 종료값이 1byte 0이구, Unicode 는 2byte 0.

이하 댓글...

unicode 인경우 그 인코딩 타입에 따라서 길이가 다릅니다. 항상 2 byte는 아니죠. 와이드 캐릭터(wchar_t)인 경우도 컴파일러에 따라 길이가 다릅니다. 비쥬얼C++에서는 2byte고 gcc 에서는 4바이트라고 하는 군요.

Commented by 코니 at 2005-07-26 20:37 x
MBCS 문자열처리시 유용한 함수들..

_mbsnextc : 다음문자(2바이트문자 나 1바이트 문자)를
unsigned int로 리턴한다.
_mbsinc : 다음문자로 포인터를 이동시켜준다
(2바이트는 2만큼, 1바이트는 1만큼)

unsigned int wchar = NULL ;
while((wchar = _mbsnextc((unsigned char*)next)) != 0) {
// 잘 사용해 본다.
next = _mbsinc(next);
}
Posted by dcmru
,