嵌入式 安装 字符编码转换 libiconv库

        libiconv是一个常用的编码转换库,支持常用的多种编码之间的转换。在Linux下,工具链gcc有专门的libiconv库,所有不用移植,但在arm-linux下就没那么幸运了,需要我们额外移植libiconv库。以下是安装步骤

 

一、字符编码转换libiconv库介绍

    libiconv是一个常用的编码转换库,支持常用的多种编码之间的转换。主要函数有:

    #include

    iconv_ticonv_open(constchar *tocode,  const char *fromcode);

    size_ticonv(iconv_t cd,  char **inbuf,  size_t *inbytesleft,  char **outbuf,  size_t *outbytesleft);

    inticonv_close(iconv_tcd);

    iconv_open是打开一个编码流,类似于打开一个编码管道(通道),出错则返回-1;

    iconv用于具体输入的转换,如果出错,则返回 -1,否则返回 0;

    iconv_close是关闭该管道(通道)。

    如果对于大量需要转换的编码,上述函数covert不适合该方式,一是内存的限制不能一次调用,二是若分多次调用会频繁打开一个编码管道(通道),导致资源浪费,最好的办法还是拆开该函数根据情况使用。   

 

二、arm-linux移植过程

    1)http://www.gnu.org/software/libiconv/ 下载 libiconv-1.14.tar.gz

    2)./configure  --host=arm-linux-  --prefix=/usr/local/iconv --enable-shared--enable-static

(根据自己的编译环境进行对应的修改,比如host:arm-linux  --prefix:目录)

    3) make   

    4) make install

 

 

 

三、实例icovtest.cpp 


/************************************************************************/
/* src:原编码 UTF-8 UTF-16  GBK                                         */
/* deec:要转换的编码 UTF-8 UTF-16  GBK*/
/* input:传入的字符串  ilen:传入的字符串长度*/
/* output:转换后的字符串 olen:转换的最大长度*/
/************************************************************************/
int covert(char *src, char *desc,  char *input, size_t ilen, char *output, size_t olen)
{
 char **pin = &input;
 char **pout = &output;
 iconv_t cd = iconv_open(desc, src);
 if (cd == (iconv_t)-1)
 {
  return -1;
 }
 memset(output, 0, olen);
 if (iconv(cd, pin, &ilen, pout, &olen)) return -1;
 iconv_close(cd);
 return 0;
}

 

void main(void *)

{

//转码测试
void UTF8_GB2312_test()
{
 int i=0;
 char *input = "土豆";
 size_t len = strlen(input);
 char *output = (char *)malloc(OUTLEN);

 printf("输入:%s\n", input);
 covert("GBK", "UTF-8", input, len, output, OUTLEN);//这里传出的长度就是output的开辟空间大小,要对应
 printf("%s\n", output);

 

}

 

 

你可能感兴趣的:(iconv字符转换库)