您的位置:首页 > 编程语言 > C语言/C++

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

2015-03-17 11:41 405 查看
一说起这种常见的比如 GB2312/UTF-8 或 ISO-8859-1/UTF-8 之间的互转,想必大家肯定会说,用#include <iconv.h> 就可以了呀,我们可以调用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<num ;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++;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: