iconv实现不同编码之间的转换
1、下载解压
地址:ftp://ftp.eenet.ee/pub/gentoo/distfiles/libiconv-1.11.tar.gz
2、配置生成Makefile
#./configure /
>CC=arm-softfloat-linux-gnu -gcc /
>--build=i686-pc-linux /
>--target=arm-softfloat-linux /
>--host=arm-softfloat-linux /
>--prefix=/usr/local/iconv/
> --enable-shared --enable -shared --enable-static
3、编译并安装:
# make && make install
4、拷贝到开发板系统lib下:
# cp /usr/local/iconv/lib/libiconv.* $(TARGET_HOME)/lib/
5、编写应用程序:
# cd $(TARGET_HOME)
# vim conv.c
#include "/usr/local/iconv /include/iconv.h" #include <stdio.h> #include <string.h> int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1; iconv_close(cd); return 0; } //UNICODE码转为GB2312码 int u2g(char *inbuf,int inlen,char *outbuf,int outlen) { return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); } //GB2312码转为UNICODE码 int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen) { return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen); } int main(void) { //UTF-8编码(有删减) unsigned char in_utf8[] = {0x20,0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe4,0xb8,0x80,0xe4,0xb8}; char out[50]; int rc; rc = u2g(in_utf8,strlen(in_utf8),out,100); printf("%s/n",out); } |
6、交叉编译此程序并在开发板上运行
# arm-softfloat-linux-gnu-gcc -o iconv conv.c -liconv
# ./iconv