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

2019-07-12 23:08发布

        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 ", input);
 covert("GBK", "UTF-8", input, len, output, OUTLEN);//这里传出的长度就是output的开辟空间大小,要对应
 printf("%s ", output);
  }