검색결과 리스트
글
UTF - 8 의 표
//////////////////////////////////////////////////////////////////////////
한글의 경우
1110 xxxx
10xx xxxx
10xx xxxx
쉬프트 연산후
xxxx 0000 ( << 4 )
xxxx xx00 ( << 2 )
xxxx xx00 ( << 2 )
유니코드로 합치기
xxxx 0000 0000 0000 ( <<8칸 밀기 )
xxxx xx00 0000 ( <<4칸 밀기 )
| 00xx xxxx ( >>2칸 밀기 )
------------------------------------
xxxx xxxx xxxx xxxx
/---------------------
110x xxxx
10xx xxxx
xxxx x000 ( << 3 )
xxxx xx00 ( << 2 )
0xxx xx00 0000
| 00xx xxxx
-----------------
0xxx xxxx xxxx
-------------------------/
//////////////////////////////////////////////////////////////////////////
WCHAR wTest[200] = L"Test문자열 1번 입니다.";
char szAnsiText[200];
int size = WideCharToMultiByte( CP_UTF8, 0, wTest, -1, NULL, NULL, NULL, NULL );
WideCharToMultiByte( CP_UTF8, 0, wTest, -1, szAnsiText, size, NULL, NULL );
BYTE byWords[4]; // UTF-8의 최대크기
wchar_t szUniText[100]; // UTF -> UNICODE로 변경된 데이터 저장할 버퍼
int nLen = ( int )_tcslen( szAnsiText ); // 문자열의 전체길이
int iUniPos = 0; // 유니코드 버퍼의 위치
int iAnsiPos = 0; // Ansi 버퍼의 위치
while( iAnsiPos != nLen )
{
byWords[ 0 ] = szAnsiText[ iAnsiPos ];
// 0x0800 ~ 0xffff
if( 0xe0 <= byWords[ 0 ] )
{
byWords[ 1 ] = szAnsiText[ ++iAnsiPos ];
byWords[ 2 ] = szAnsiText[ ++iAnsiPos ];
byWords[ 0 ] <<= 4;
byWords[ 1 ] <<= 2;
byWords[ 2 ] <<= 2;
szUniText[ iUniPos ] =
byWords[ 0 ] << 8 | byWords[ 1 ] << 4 | byWords[ 2 ] >> 2;
}
// 0x0080 ~ 0x07ff
else if( 0xc0 <= byWords[ 0 ] )
{
byWords[ 1 ] = szAnsiText[ ++iAnsiPos ];
byWords[ 0 ] <<= 3;
byWords[ 1 ] <<= 2;
szUniText[ iUniPos ] = byWords[ 0 ] << 3 | byWords[ 1 ] >> 2;
}
// 0x0001 ~ 0x007f
else
szUniText[ iUniPos ] = byWords[ 0 ];
++iUniPos;
++iAnsiPos;
}
// 널문자 추가
szUniText[ iUniPos ] = 0;
'잡동사니' 카테고리의 다른 글
무슨 게임 무슨 엔진 (0) | 2010.01.10 |
---|---|
장난칠때 써먹을 반한 잡지식? (0) | 2009.10.29 |
성향 테스트 (0) | 2009.10.05 |
RECENT COMMENT