C语言实现几种编码形式的互转 -----(整理加原创)

一说起这种常见的比如 GB2312/UTF-8 或 ISO-8859-1/UTF-8 之间的互转,想必大家肯定会说,用#include 就可以了呀,我们可以调用code_convert();函数 ,只要传参数正确,还用那么麻烦,用C语言转换么???

因为使用的是ST平台.所以我们特别喜欢的code_convert();函数的神奇魔力仿佛被施了魔法被困住.因为裁剪的原因.我们只可以使用部分的转码. 那么问题来了.GB2312/UTF-8 或 ISO-8859-1/UTF-8 互转不支持.尝试了好久,最终看见了裁剪,才恍然大悟.(见我的资源库)

以下是部分代码,详尽代码见资源库

1.iconv 函数

/*********************************************************************************************
*Authors & Time:_lixuezheng_2014/09/22_make function_
*Function : name_convert_to_utf8
*Parameter:from_name,to_utf8_name
*Return : 0
*********************************************************************************************/
void name_convert_to_utf8(u_char *from_name,u_char *to_utf8_name)
{
if(from_name[0]>0 && from_name[0]<0x20)
{


switch(from_name[0])
{

case 0x13:
/*__2_gb2312_0x13___*/
gb2312_to_utf8(&from_name[1],to_utf8_name);
break;

case 0x10:
/*__3_iso-8859-1_0x10___*/
iso8859_1_to_utf8(&from_name[1], to_utf8_name);
break;


case 0x11:
case 0x14:
/*_4_big5_0x11__&&__5_ISO_10646_0x14*/
code_convert("UCS-2BE","utf-8",&from_name[1],32,to_utf8_name,32);
break;
default:
filtrateCharacter(from_name,to_utf8_name);
break;
}
}
else
{
if(gb2312_to_utf8(from_name, to_utf8_name) == NULL)
{
filtrateCharacter(from_name,to_utf8_name);
}


}


}

2.特殊字符转义.

/*********************************************************************************************
*Authors & Time:_lixuezheng_2014/10/08_make function_
*Function : Special_Symbol_Convert for Encoder Top_menu OEM and Device.
*Parameter:Maybe need  covert  name
*Return : 0
*********************************************************************************************/
void  Special_Symbol_Convert(u_char *need_covert_name,u_char *after_covert_name,int num)
{
int i;
char *p = NULL;


p = after_covert_name;


//special_symbol need convert ( & is 0x26 )( < is 0x3c )( > is 0x3e )( " is 0x22 )( ' is 0x27 )
for(i = 0;i{
if(need_covert_name[i] == 0x26)
{
sprintf(p,"&");//&//&&
p=p+5;
}
else if(need_covert_name[i] == 0x3c)
{
sprintf(p,"<");//<//<<
p=p+5;
}
else if(need_covert_name[i] == 0x3e)
{
sprintf(p,">");//>//>>
p=p+5;
}
else if(need_covert_name[i] == 0x22)
{
sprintf(p,""");//"//""
p=p+5;
}
else if(need_covert_name[i] == 0x27)//Audio Bit Rate
{
sprintf(p,"'");//'//''
p=p+5;
}
else
{
*p = need_covert_name[i];
p++;
}
}


}



你可能感兴趣的:(字符编码,C语言)