关于在ARM平台下,iconv转码函数,调用出错问题的解决方案

ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法:

1. 先下载转码库:libiconv-1.14.tar.gz

2. 假设交叉编译工具arm-gcc,安装在 /usr/local/arm

编译命令arm-linux-gcc,的环境变量是:/usr/local/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin

3. 解压缩libiconv-1.14.tar.gz,进入目录libiconv-1.14,

4. 配置、编译、安装:

# ./configure --host=arm-linux --prefix=/usr/local/arm/iconv CC=arm-linux-gcc LDFLAGS="-L/usr/local/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/lib" --enable-static

# make

# make install

5. 在/usr/local/arm/iconv中,将lib/libiconv.a和include/iconv.h拷贝到自己的程序目录里使用即可。

注意:包含iconv.h头文件时用#include "iconv.h",不要用#include <iconv.h>


封装的编码转换函数:

//编码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
    iconv_t cd;
    int rc;
    char **pin = &inbuf;
    char **pout = &outbuf;

    cd = iconv_open(to_charset,from_charset);
    if (cd == -1) 
    {
        printf("iconv_open error\n");
        return -1;
    }

    memset(outbuf,0,outlen);
    if (iconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen) == -1) 
    {
        printf("iconv error\n");
        iconv_close(cd);
        return -1;
    }

    iconv_close(cd);
    return 0;
}


ARM平台下,读卡器读取的身份证文字信息,需要从Unicode转为GBK

能成功的转码方式:

Unicode:UCS-2-INTERNAL  , UTF-16LE

中文:GB18030 ,GBK,GB2312

code_convert("UCS-2-INTERNAL","GB18030",Info, sizeof(Info),cANSIStr, sizeof(cANSIStr));


 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值