iconv是linux下的编码转换的工具,它提供命令行的使用和函数接口支持

函数接口

iconv函数族的头文件是iconv.h,使用前需包含之。
#include <iconv.h>

iconv函数族有三个函数,原型如下:
  iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。

  size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。
注意:inbuf和outbuf都必须是有存储空间的不能定义为常量,如:char *inbuf = "abc" 或者是char *outbuf = "123"这样定义都是错误的。另外inbuf,inbytesleft,outbuf,outbytesleft这几个参数在使用过程中都会改变,最好是先保存一下原值,然后再使用。

  int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdbool.h>
 #include <iconv.h>
 bool unicode_to_utf8 (char *inbuf, size_t *inlen, char *outbuf, size_t *outlen)
 {
   /* 目的编码, TRANSLIT:遇到无法转换的字符就找相近字符替换
    *           IGNORE :遇到无法转换字符跳过*/
   char *encTo = "UTF-8//IGNORE";
   /* 源编码 */
   char *encFrom = "UNICODE";

   /* 获得转换句柄
    *@param encTo 目标编码方式
    *@param encFrom 源编码方式
    * */
   iconv_t cd = iconv_open (encTo, encFrom);
   )
   {
      perror ("iconv_open");
   }

   /* 需要转换的字符串 */
   printf("inbuf=%s\n", inbuf);

   /* 打印需要转换的字符串的长度 */
   printf("inlen=%d\n", *inlen);

   /* 由于iconv()函数会修改指针,所以要保存源指针 */
   char *tmpin = inbuf;
   char *tmpout = outbuf;
   size_t insize = *inlen;
   size_t outsize = *outlen;

   /* 进行转换
    *@param cd iconv_open()产生的句柄
    *@param srcstart 需要转换的字符串
    *@param inlen 存放还有多少字符没有转换
    *@param tempoutbuf 存放转换后的字符串
    *@param outlen 存放转换后,tempoutbuf剩余的空间
    *
    * */
   size_t ret = iconv (cd, &tmpin, inlen, &tmpout, outlen);
   )
   {
      perror ("iconv");
   }

   /* 存放转换后的字符串 */
   printf("outbuf=%s\n", outbuf);

   //存放转换后outbuf剩余的空间
   printf("outlen=%d\n", *outlen);

   ;
   ; i<(outsize- (*outlen)); i++)
   {
      //printf("%2c", outbuf[i]);
      printf("%x\n", outbuf[i]);
   }

   /* 关闭句柄 */
   iconv_close (cd);

   ;
 }

 bool utf8_to_unicode (char *inbuf, size_t *inlen, char *outbuf, size_t *outlen)
 {

   /* 目的编码, TRANSLIT:遇到无法转换的字符就找相近字符替换
    *           IGNORE :遇到无法转换字符跳过*/
   char *encTo = "UNICODE//IGNORE";
   /* 源编码 */
   char *encFrom = "UTF-8";

   /* 获得转换句柄
    *@param encTo 目标编码方式
    *@param encFrom 源编码方式
    * */
   iconv_t cd = iconv_open (encTo, encFrom);
   )
   {
       perror ("iconv_open");
   }

   /* 需要转换的字符串 */
   printf("inbuf=%s\n", inbuf);

   /* 打印需要转换的字符串的长度 */
   printf("inlen=%d\n", *inlen);

   /* 由于iconv()函数会修改指针,所以要保存源指针 */
   char *tmpin = inbuf;
   char *tmpout = outbuf;
   size_t insize = *inlen;
   size_t outsize = *outlen;

   /* 进行转换
    *@param cd iconv_open()产生的句柄
    *@param srcstart 需要转换的字符串
    *@param inlen 存放还有多少字符没有转换
    *@param tempoutbuf 存放转换后的字符串
    *@param outlen 存放转换后,tempoutbuf剩余的空间
    *
    * */
   size_t ret = iconv (cd, &tmpin, inlen, &tmpout, outlen);
   )
   {
      perror ("iconv");
   }

   /* 存放转换后的字符串 */
   printf("outbuf=%s\n", outbuf);

   //存放转换后outbuf剩余的空间
   printf("outlen=%d\n", *outlen);

   ;
   ; i<(outsize- (*outlen)); i++)
   {
      //printf("%2c", outbuf[i]);
      printf("%x\n", outbuf[i]);
   }

   /* 关闭句柄 */
   iconv_close (cd);

   ;
 }

 int main ()
 {
   /* 需要转换的字符串 */
   char *text = "这是需要转换的字符串";    

   ] = {};
   strcpy (inbuf, text);
   size_t inlen = strlen (inbuf);

   /* 存放转换后的字符串 */
   ] = {};
   size_t outlen = ;

   utf8_to_unicode (inbuf, &inlen, outbuf, &outlen);
   printf ("print outbuf: %s\n", outbuf);

   size_t outsize = strlen(outbuf);
   size_t insize = ;
   ] = {};
   unicode_to_utf8 (outbuf, &outsize, instr, &insize);
   printf ("print buf: %s\n", instr);
   ;
 }

iconv字符转换的更多相关文章

  1. C++用iconv进行页面字符转换

    在对HTML页面进行爬取时,总会遇到一些不同的编码,而我们通常都不会一一对这些编码进行处理,而是集体转换成相同的编码,也易于装入数据库.此时,iconv便成为一个很方便的工具. iconv 头文件&q ...

  2. iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)

    iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...

  3. PHP iconv()编码转换函数用法示例

    PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...

  4. 用linux的iconv函数 转换编码

    inux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不是 ...

  5. php iconv函数转换出错问题

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  6. 【JavaScript】JS 中 原始字符串 和 HTML 字符转换

    参考资料:http://www.sjyhome.com/javascript/js-html-escape.html JS转换HTML转义符 SJY • 发表于:2013年10月05日 17:04 • ...

  7. 带毫秒的字符转换成时间(DateTime)格式的通用方法

    C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...

  8. sql字符转换函数大全

    删除空格 有两个函数,TTRIM()和LTRIM(),可以用来从字符串中剪掉空格.函数LTRIM()去除应该字符串前面的所有空格:函数RTRIM()去除一个字符串尾部的所有空格.这些和vbscript ...

  9. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理

    python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...

随机推荐

  1. UML建模:学习笔记(1)

    UML:学习笔记(1) 事物 结构事物 类: 接口: 协作:(定义元素之间的相互作用) 用例:(在系统外部和系统交互的人) 组件:(描述物理系统的一部分) 节点:(一个节点可以被定义为运行时存在的物理 ...

  2. CodeForces - 580C Kefa and Park 【BFS】

    题目链接 http://codeforces.com/problemset/problem/580/C 题意 根节点是 1 然后所有的叶子结点都是饭店 从根节点到叶子结点的路径上 如果存在 大于m 个 ...

  3. 从性能角度分析一下String,List,Map

    使用String.subString()方法的时候注意内存溢出的问题 public static void testH() { List<String> strings = new Arr ...

  4. PHP常用正则验证

    手机号,身份证,ip验证 //正则验证手机号 正确返回 true function preg_mobile($mobile) { if(preg_match("/^1[34578]\d{9} ...

  5. LINQ 学习路程 -- 查询操作 Join

    Join操作是将两个集合联合 Joining Operators Usage Join 将两个序列连接并返回结果集 GroupJoin 根据key将两个序列连接返回,像是SQL中的Left Join ...

  6. 算法(Algorithms)第4版 练习 1.5.15

    用归纳法推导: 1.height = 0时,成立,其level 0的节点个数为C(0,0)=1. height = 1时,成立,其level 0的节点个数为C(1,0)=1,其level 1的节点个数 ...

  7. php数据结构课程---2、链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的))

    php数据结构课程---2.链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的)) 一.总结 一句话总结: php是弱类型语言,变量即可表示数值,也可表示对象:链表节点的数据域的值就 ...

  8. Struts 2简单实例

    Struts 2简单实例 参考: [java开发系列]—— struts2简单入门示例 - xingoo - 博客园https://www.cnblogs.com/xing901022/p/39616 ...

  9. 使用kill命令终止进程shell脚本

    因有的程序使用kill才能结束掉进程,没有关闭脚本,以我司的服务为例,服务名叫asset-server服务,只有启动脚本,自编写关闭脚本,及重启动脚本. 关闭服务脚本. vim asset-shutd ...

  10. 百度编辑器UEditor配置toolbars工具条功能按钮

    两种方式: 1.代码中定义 <script id="container" name="content" type="text/plain&quo ...