# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltmemory.h & gt
# include & ltstring.h & gt
int utf8_to_unicode(char* pInput,char** ppOutput)
{
int outputSize = 0;//记录转换后的Unicode字符串的字节数。
* ppOutput =(char *)malloc(strlen(pInput)* 2);?//为输出字符串分配足够的内存空间
memset(*ppOutput,0,strlen(pInput)* 2);
char * tmp = * ppOutput//临时变量,用于遍历输出字符串。
while (*pInput)
{
if(* pin put & gt;0x00和。& amp* pInput & lt= 0x7F) //处理单字节UTF8字符(英文字母和数字)
{
* tmp = * pInput
tmp++;
* tmp = 0;//小终端方法意味着在高位地址填充0。
}
else if(((* pInput)& amp;0xE0) == 0xC0) //处理双字节UTF8字符。
{
char high = * pInput
pinput++;
char low = * pInput
如果((低& amp0xC0)!= 0x80)?//检查它是否是合法的UTF8字符表示。
{
return-1;//如果不是,则报错。
}
*tmp =(高& lt& lt6) +(低& amp0x3F);
tmp++;
*tmp =(高& gt& gt2)& amp;0x07
}
else if(((* pInput)& amp;0xF0) == 0xE0)?//处理三字节UTF8字符
{
char high = * pInput
pinput++;
char middle = * pInput
pinput++;
char low = * pInput
如果(((中& amp0xC0)!= 0x 80)| |((low & amp;0xC0)!= 0x80))
{
return-1;
}
* tmp =(middle & lt;& lt6) +(低& amp0x7F);
tmp++;
*tmp =(高& lt& lt4)+((middle & gt;& gt2)& amp;0x0F);
}
不处理含有其他字节的Else // UTF8字符。
{
return-1;
}
pinput++;
tmp++;
outputSize+= 2;
}
* tmp = 0;
tmp++;
* tmp = 0;
返回outputSize
}
扩展数据
UTF-8:随着互联网的普及,对统一编码方法有着强烈的需求。UTF-8是互联网上使用最广泛的unicode实现。其他的实现还有UTF-16和UTF-32,但是在互联网上基本不用。同样,这里的关系是UTF-8是Unicode的实现之一。
UTF-8最大的特点之一就是它是一种变长编码方法。它可以用1~6个字节来表示一个符号,字节长度根据符号的不同而不同。
UTF八号协议的编码规则:
UTF-8编码规则非常简单,只有两条:
1.对于单字节符号,字节的第一位设置为0,接下来的7位是该符号的unicode代码。因此,对于英文字母,UTF-8编码和ASCII编码是相同的。
2.对于n字节的符号(n >;1),第一个字节的前n位全部设置为1,第n+1位设置为0,后面字节的前两位全部设置为10。剩下没有提到的位都是这个符号的unicode码。