Linux C转码

来源:互联网 发布:tiffen dfx mac 破解 编辑:程序博客网 时间:2024/06/02 00:28

说到Linux C下的转码就不得不提到iconv这个函数。

还是用代码说话,我会将注释写的详细些。

 

#include   <stdio.h> 

#include   <iconv.h>

 

//UTF-8转到GBK,先定义两个宏,万一以后有变动修改下这里即可。

#define     ICONVFROM    “UTF-8”

#define     ICONVTO          “GBK”

 

/*

iconv需要一个iconv_t类型的变量作为转码标识

这里我们申请一个全局静态变量

*/

static        iconv_t     cnv;

 

/*

将转码的初始化步骤封装成函数

返回 -1 表示失败,返回 0表示成功

*/

int    iconvOpen( )

{

         if ( ( cnv = iconv_open( ICONVTO,ICONVFROM ) ) != (iconv_t) -1 ) {

                   fprintf( stderr, “转码初始化失败” );

                   return -1;

         }

         return 0;

}

 

//将转码的结束工作也封装成函数

void  iconvClose()

{

         iconv_close( cnv );

}

 

/*

将转码过程封装成函数

返回 -1 表示失败,返回 0表示成功

*/

int    _iconv(char * WordBefore, char * WordAfter)

{

         size_t       i,j;

         int              r;

        

         /*

 iconv的五个参数的意义分别是:

1、  iconv_open申请的转码标识

2、  转码前的内容

3、  转码前内容的长度,如果这是存放在数组中,那么将数组的长度传过来即可。

4、  转码后内容的存放区

5、  转码内容的长度(注意是“转码内容”而不是“转码后内容存放区”的长度)

其中第5个参数一般不会用到,但还是知道比较好。

         */

         if ( ( r = iconv( cnv, &WordBefore,&i, &WordAfter, &j ) ) < 0 ) {

                   fprintf( stderr, “转码失败\n” );

                   return -1;

         }

         return 0;

}

0 0