分类: C/C++
2008-05-22 17:47:50
UTF-8就是对unicode编码的一种实现, UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
inline WORD UCode(const BYTE*& src)
{
WORD ucode;
if (src[0] < 0x80) // is ascii
{
return *src ? *src++ : 0; //0 means: it’s the string’s end
}
if (src[0] < 0xE0) // process utf8 use 2 char., 0xE0=111xxxxx
{
if (src[1] && (src[0] & 0x1F)) // make sure src[0],src[1] is effect char
{ //0x1F=00011111(5个1), 0x3F=00111111(6个1)
ucode = ((src[0] & 0x1F) << 6) | (src[1] & 0x3F);
//if (0x80)unicode=(11000100
src += 2;
}
else
{
src++;
return 0; //0 means: it isn’t an effect dwcs
}
}
else //use utf8 more then 2bytes
{
if (src[1] && (src[0] & 0xF)) //utf8 use 3 char
{
if (src[2] && (src[1] & 0x3F))
{
ucode = ((src[0] & 0xF) << 12) | ((src[1] & 0x3F) << 6) | (src[2] & 0x3F);
src += 3;
}
else
{
src += 2;
return 0; //no effect char
}
}
else
{
src++;
return 0; //no effect char
}
} //if char use morethen 3 char, how to do it?
return ucode;
} 