有许多人在做项目的时候都会遇到字符编码的不一致导致的乱码问题,那如何去解决呢?在Linux系统上可以通过iconv函数族来进行编码转换,但有时候我们并不需要全部的字符集,因为可能会占用比较大的空间,本文主要支持CP437编码格式
库文件下载:https://ftp.gnu.org/pub/gnu/libiconv/
1.下载完成后直接解压
tar -xvf libiconv-1.15.tar.gz
2.进入目录,编写编译脚本,build.sh
CC=gcc
HOST=
TARGET=
DIR=/root/linux/direcho $DIR./configure CC=$CC --target=$TARGET --host=$HOST --prefix=$DIR --enable-extra-encodingsmake && make install
上面注意 --enable-extra-encodings是打开扩展字符集
需要根据自己使用场合修改交叉编译链
3.执行脚本进行编译
chmod +x build.sh
./build.sh
4.编译完成后
5.这里执行strip压缩体积
6.我们执行程序看看都包含哪些字符集,可以看到支持了所有的字符,有好多是我们不需要的,下面进行裁剪
该iconv可执行文件依赖上面的库,如果导入arm设备要导入相应的库文件
7.进入lib目录编辑iconv.c文件,屏蔽一些无用代码
//#define USE_AIX
//#define USE_OSF1
#define USE_DOS
//#define USE_EXTRA
首先屏蔽一些宏,然后编译发现还是有一些我们不想要的字符集
8.编辑lib/encodings_dos.def文件删除不需要的字符集,同时删除aliases_dos.h文件的相关定义,最后删除canonical_dos.h中的一些报错就可以了
9.经过strip后这个时候在看就小的多了
再次使用iconv查看支持的字符集就可以了
网上给出的另一种裁剪方法:
libiconv库裁剪