当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。而libiconv是一个常用的编码转换库,支持常用的多种编码之间的转换。在Linux下,工具链gcc有专门的libiconv库,所有不用移植,但在arm-linux下就没那么幸运了,需要我们额外移植libiconv库,不过,过程还是比较简单的。

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

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

#include <iconv.h>

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

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

    int iconv_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 CC=arm-hismall-linux-gcc --target=arm-linux--host=arm-hismall-linux --prefix=/usr/local/iconv --enable-shared--enable-static

3) make

4) make install

三、实例unicode.cpp

//#include <iconv.h>
#include <iostream>
#include <string.h>
#include "./iconv.h"
using namespace std;// 代码转换操作类
class CodeConverter {
private:iconv_t cd;public:// 构造CodeConverter(const char *from_charset, const char *to_charset) {cd = iconv_open(to_charset, from_charset);}// 析构~CodeConverter() {iconv_close(cd);}// 转换输出int convert(char *inbuf, int inlen, char *outbuf, int outlen) {char **pin = &inbuf;char **pout = &outbuf;memset(outbuf, 0, outlen);return iconv(cd, pin, (size_t *)&inlen, pout, (size_t *)&outlen);}
};int main(int argc, char **argv)
{char *gb2312 = "我是中国人";char out0[256] = {0};char out1[256] = {0};// gb2312-->utf-8CodeConverter cc0 = CodeConverter("gb2312","utf-8");cc0.convert(gb2312, strlen(gb2312)+1, out0, 256);cout << "gb2312-->utf-8 in=" << gb2312 << ",out0=" << out0 << endl;// utf-8-->gb2312CodeConverter cc1 = CodeConverter("utf-8", "gb2312");cc1.convert(out0, strlen(out0)+1, out1, 256);cout << "utf-8-->gb2312 in=" << out0 << ",out1=" << out1 << endl;    return 0;
}

arm-hismall-linux-g++ unicode.cpp -L./-liconv  //静态库然后nfs下载到板子上或直接运行就ok了。

字符编码转换libiconv库相关推荐

  1. iconv 判断字符编码_iconv字符编码转换全攻略

    iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的 ...

  2. android 使用icon进行字符编码转换

    在使用ndk开发应用程序时,有时需要字符编码转换,这里使用开源库icon进行字符编码转换,代码如下 char * convertString(const char * fromCode, const ...

  3. 字符编码转换类(支持多国语言)

    头文件StrConvertor.h /* * 字符编码转换库,支持多国语言. */ #pragma once #include <string>class CStrConvertor { ...

  4. c语言使用iconv函数实现字符编码转换

    c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...

  5. 《MySQL tips:隐式类型转换与隐式字符编码转换对查询效率的影响》

    维护一个交易系统,交易记录表tradelog包含交易流水号(tradeid).交易员id(operator).交易时间(t_modified)等字段. create table 'tradelog' ...

  6. Android字符编码转换,GBK转UTF-8

    Android字符编码转换,GBK转UTF-8 网上看了很多都不能用,最后看到这个方法,很靠谱,分享给大家! String str; str = new String(str.getBytes(&qu ...

  7. Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    文章目录 前言 简述 ASCII GBK Unicode UTF-8 应用场景 开发环境 编码转换 16进制数值转换为16进制字符 16进制数值转化为字符串 16进制字符串转换为Unicode字符串 ...

  8. iconv()和mb_conver_encoding()字符编码转换函数

    2019独角兽企业重金招聘Python工程师标准>>> 一. `string iconv ( string $in_charset , string $out_charset , s ...

  9. 小工具———字符编码转换查看(MFC)

    -------------------------- 2020年6月4日09:38:54 更新 请移步另外一个简便完善版本工具 https://blog.csdn.net/xuebing1995/ar ...

  10. 【转】Vim 字符编码转换

    如果只是要简单的转换文件编码,打开后          :set fileencodings=utf-8 ,然后 w (存盘)一下即可转化为 utf8 格式,       :set fileencod ...

最新文章

  1. iOS逆向(1)-密码学(RSA)
  2. 给定一个介于0和1之间的实数,类型为double,打印它的二进制表示
  3. python 类-Python入门--一篇搞懂什么是类
  4. 将GB28181国标流转成RTSP流
  5. 091_类数组对象转为数组
  6. SQL*Loader之CASE8
  7. [2017BUAA软工]结对项目:数独扩展
  8. 拆分:分解单块系统——《微服务设计》读书笔记
  9. python apply_async执行不了_python – Django Celery apply_async不起作用
  10. 大刀阔斧,抽丝剥茧:评红黑树系列文章
  11. K33 不是平面图_Edraw Max:一款简单好用的建筑平面图设计软件!
  12. 机器学习中的数学——点估计(三):极大似然估计/最大似然估计(Maximum Likelihood Estimate,MLE)
  13. c语言给图片打码,OpenCV (一):初相识:马赛克处理图片
  14. 基于互联云及多云的云化基础设施算力调度
  15. 苹果id登录_英雄联盟手游是用苹果ID好还是拳头好 账号选择建议
  16. TOPSIS法笔记(优劣解距离法)
  17. 一款微信小程序是如何诞生的。
  18. [转]index.dat文件剖析
  19. Spring学习笔记 使用annotation配置实现Bean的auto-wiring (自动绑定)
  20. 上海京东招聘 Java_【上海京东工资】java开发工程师待遇-看准网

热门文章

  1. PMP_模考三 (3A通过分享)(180题附答案及解析)
  2. 函数数列极限求法总结
  3. 编程语言python入门-Python基础教程,Python入门教程(非常详细)
  4. 全国、省、地级市、区县乡镇级矢量地图2021年(最新)
  5. lede usb启动_OpenWrt LEDE 自动挂载USB U盘的方法
  6. 中职“网络班级”中家校沟通模块的应用实践
  7. 蓝天模具风扇调速软件_联力UNI FAN SL120风扇体验:模组化拼装的风扇
  8. iOS 视频播放器小屏和全屏切换
  9. 微信小程序 图片显示不完全
  10. ffplay-主要数据结构分析