UTF-8을 다룰 일이 있어서 프로그램 만들면서
제작한 간단한 함수 2개 뽑아서 소개합니다.
// UTF-8 유니코드에서 3바이트 문자인 경우, 식별비트를 제거하고 2바이트 한문자로 만들어 돌린다.
// 3바이트 문자가 아니라면 0을 돌린다.
//
WORD GetUTF8ToUnicode(byte *p)
{
WORD code = 0;
if ((p[0] & 0xF0) == 0xE0 && (p[1] & 0xC0) == 0x80 && (p[2] & 0xC0) == 0x80)
{
code = ((WORD)(p[0] & 0xF) << 12) | ((WORD)(p[1] & 0x3F) << 6);
code |= (p[2] & 0x3F);
}
return code;
}
// 이건 유니코드 글자중에 한글 한자 등 3바이트 글자인가 확인하는 작업.
bool IsUTF8_3ByteWord(byte *p)
{
if ((p[0] & 0xF0) == 0xE0 && (p[1] & 0xC0) == 0x80 && (p[2] & 0xC0) == 0x80)
return true;
return false;
}
빌더는 막강한 문자 코드 변환 함수가 준비되어 있어서
보통은 이런거 몰라도 문제가 없지만, UTF-8 코드를 직접 파싱 한다던지
직접 판단해야 할때 그 구조를 모르면 만들기 곤란하죠.
이건 잘 동작하는거 확인한 것이니 복사 신공용.
|
이 부분은 확장 한글에서 문제가 있습니다. 뒤에 1바이트는 가끔 0x80이 맞지 않는 경우가 있습니다.