int UTF8ToUnicode(const char* utf8, wchar_t *unicode)
{
char b1,b2,b3;
int unicSize = 0;
const char* p = utf8;
char* tmp = (char *)unicode;
while(*p)
{
if(*p >= 0x00 && *p <= 0x7F)
{
*tmp = *p;
tmp++;
tmp++;
unicSize += 1;
}
/* 110xxxxx 10xxxxxx*/
else if((*p & 0xE0) == 0xC0)
{
b1 = *p;
p++;
b2 = *p;
*tmp = (b1 << 6) | (b2 & 0x3F);
tmp++;
*tmp = (b1 >> 2) & 0x07;
tmp++;
unicSize += 1;
}
/* 1110xxxx 10xxxxxx 10xxxxxx */
else if((*p & 0xF0) == 0xE0)
{
b1 = *p;
p++;
b2 = *p;
p++;
b3 = *p;
*tmp = (b2 << 6) | (b3 & 0x3F);
tmp++;
*tmp = (b1 << 4) | ((b2 >> 2) & 0x0F);
tmp++;
unicSize += 1;
}
p++;
}
*tmp = '\0';
tmp++;
*tmp = '\0';
return unicSize;
}
int UnicodeToUTF8(char* dest, int destSize, const wchar_t* src, int srcSize)
{
char * u8 = dest;
char * u8_max = u8 + size;
const wchar_t * u2 = src;
const wchar_t * u2_max = src + srclen;
while ((u2 < u2_max) && (u8 < u8_max)) {
if ((*u2) >= 0x00 && (*u2) <= 0x7F)
{
*u8 = (*u2) & 0x7F;
u8++;
}
else if ((*u2) >= 0x80 && (*u2) <= 0x07FF)
{
*u8 = 0xC0 | (((*u2) >> 6) & 0x1F);
u8++;
*u8 = 0x80 | ((*u2) & 0x3F);
u8++;
}
else if ((*u2) >= 0x0800 && (*u2) <= 0xFFFF)
{
*u8 = 0xE0 | (((*u2)>>12) & 0x0F);
u8++;
*u8 = 0x80 | (((*u2) >> 6) & 0x3F);
u8++;
*u8 = 0x80 | ((*u2) & 0x3F);
u8++;
}
u2++;
}
*u8 = '\0';
return (u8-dest);
}
UTF8与Unicode互转
最新推荐文章于 2023-06-12 13:31:49 发布