依赖库libiconv,libiconv库的交叉编译不做描述,网上很多

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include "iconv.h"
  5. #include "eventlist.h"
  6.  
  7. static int ChangeCode( const char* pFromCode, const char* pToCode, const char* pInBuf,
  8. size_t* piInLen, char* pOutBuf, size_t* piOutLen )
  9. {
  10. int iRet;
  11. char **pin = &pInBuf;
  12. char **pout = &pOutBuf;
  13. iconv_t hIconv;
  14.  
  15. //printf("%s: outlen=%d, inlen=%d\n", __FUNCTION__, *piOutLen, *piInLen);
  16.  
  17. //打开字符集转换
  18. hIconv = iconv_open( pToCode, pFromCode );
  19. if ( - == (int)hIconv )
  20. {
  21. perror("iconv_open");
  22. return -;
  23. }
  24. //开始转换
  25. printf("%s: 1 outlen=%d\n", __FUNCTION__, *piOutLen);
  26. iRet = iconv( hIconv, pin, piInLen, pout, piOutLen );
  27. if ( - == iRet )
  28. {
  29. perror("iconv");
  30. return -;
  31. }
  32. printf("%s: 2 outlen=%d\n", __FUNCTION__, *piOutLen);
  33.  
  34. //关闭字符集转换
  35. iconv_close( hIconv );
  36.  
  37. **pout = '\0';
  38. return iRet;
  39. }
  40.  
  41. static int MAIN_UTFToGb2312(char * pcFrom, char * pcTo, int iMaxToLen)
  42. {
  43. char * psInBuf = NULL;
  44. char * psOutBuf = NULL;
  45. unsigned int iInLen = ;
  46. unsigned int iOutLen = ;
  47. int iRet;
  48.  
  49. iInLen = strlen(pcFrom)+;
  50. psInBuf = (char *)malloc(iInLen);
  51. if ( NULL == psInBuf )
  52. {
  53. return ;
  54. }
  55. memset(psInBuf, 0x0, iInLen);
  56. memcpy(psInBuf, pcFrom, iInLen);
  57.  
  58. iOutLen = iMaxToLen;
  59. psOutBuf = (char *)malloc(iOutLen);
  60. if ( NULL == psOutBuf )
  61. {
  62. free(psInBuf);
  63. psInBuf = NULL;
  64. return ;
  65. }
  66. memset(psOutBuf, 0x0, iOutLen);
  67.  
  68. iRet = ChangeCode( "utf-8", "gb2312", psInBuf, &iInLen, psOutBuf, &iOutLen );
  69. //iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
  70. if ( != iRet )
  71. {
  72. printf("ChangeCode: Error\n");
  73. //return 0;
  74. }
  75. memcpy(pcTo, psOutBuf, iOutLen);
  76. printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen);
  77.  
  78. free(psInBuf);
  79. psInBuf = NULL;
  80. free(psOutBuf);
  81. psOutBuf = NULL;
  82.  
  83. return iOutLen;
  84.  
  85. }
  86.  
  87. static int MAIN_GB2312ToUTF(char * pcFrom, char * pcTo, int iMaxToLen)
  88. {
  89. char * psInBuf = NULL;
  90. char * psOutBuf = NULL;
  91. unsigned int iInLen = ;
  92. unsigned int iOutLen = ;
  93. int iRet;
  94.  
  95. iInLen = strlen(pcFrom)+;
  96. psInBuf = (char *)malloc(iInLen);
  97. if ( NULL == psInBuf )
  98. {
  99. return ;
  100. }
  101. memset(psInBuf, 0x0, iInLen);
  102. memcpy(psInBuf, pcFrom, iInLen);
  103.  
  104. iOutLen = iMaxToLen;
  105. psOutBuf = (char *)malloc(iOutLen);
  106. if ( NULL == psOutBuf )
  107. {
  108. free(psInBuf);
  109. psInBuf = NULL;
  110. return ;
  111. }
  112. memset(psOutBuf, 0x0, iOutLen);
  113.  
  114. iRet = ChangeCode( "gb2312", "utf-8", psInBuf, &iInLen, psOutBuf, &iOutLen );
  115. //iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
  116. if ( != iRet )
  117. {
  118. printf("ChangeCode: Error\n");
  119. //return 0;
  120. }
  121. memcpy(pcTo, psOutBuf, iOutLen);
  122. printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen);
  123.  
  124. free(psInBuf);
  125. psInBuf = NULL;
  126. free(psOutBuf);
  127. psOutBuf = NULL;
  128.  
  129. return iOutLen;
  130.  
  131. }
  132.  
  133. int main()
  134. {
  135. char strUTF[]={
  136. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  137. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  138. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  139. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  140. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  141. 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
  142. 0x00, 0x00, 0x00
  143. };
  144. char chTmpStr[];
  145. int len = ;
  146.  
  147. memset(chTmpStr, 0x0, );
  148. MAIN_UTF2Gb2312(strUTF, chTmpStr, );
  149. printf("Main: change=%s\n", chTmpStr);
  150.  
  151. return ;
  152. }
  153.  

C语言-字符编码转换:UTF与GB2312的更多相关文章

  1. php字符编码转换之gb2312转为utf8(转)

    在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ...

  2. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  3. Char Tools,方便的字符编码转换小工具

    工作关系,常有字符编码转换方面的需要,写了这个小工具 Char Tools是一款方便的字符编码转换小工具,基于.Net Framework 2.0 Winform开发 主要功能 URL编码:URLEn ...

  4. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  5. C语言字符编码处理

    一.字符编码识别 1.简介 uchardet是一个开源的用于文本编码检测的C语言库,其功能模块是用C++实现的,通过一定数量的字符样本独立的分析出文本的编码,当前已经支持UTF-8/GB13080/B ...

  6. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  7. erlang中字符编码转换(转)

    转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来 ...

  8. 编码问题 php字符编码转换类

    各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求. php 字符编码转换类,支持ANSI.Unicode.Unicode big endian.UTF-8.UTF-8+Bom ...

  9. Python—字符编码转换、函数基本操作

    字符编码转换 函数 #声明文件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了文件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...

随机推荐

  1. python基础教程

    转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...

  2. JavaScript的原型

    //回顾构造函数 function Box(name, age) { this.name = name; //实例属性 this.age = age; this.run = function() { ...

  3. Linux--正则表达式--详解

    一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本 ...

  4. 获得当前设备可用的内存 和 获取当前任务所占用的内存 (单位:MB)(转)

    获取当前任务所占的内存: #include <sys/sysctl.h> #include <mach/mach.h> // 任务占用内存 double usedMemory( ...

  5. 对简单的正则表达式的理解V1.0

    [^<]* 我得理解也是基本来自官方的解释 [] 我理解是它其中的内容,是指内容哦, 内容是可以选择的 字符 集合 ,比如说  @"<div style="color: ...

  6. Keil MDK中使用pc-lint的详细方法

    keil MDK版本:V4.03 PC-lint版本:  V8.0 关于pc-lint的强大作用,网上有很多,这里不想再复述,只说一句:能通过pc-lint检验的程序不一定没有问题,但通过了pc-li ...

  7. POJ 3484 Showstopper(二分答案)

    [题目链接] http://poj.org/problem?id=3484 [题目大意] 给出n个等差数列的首项末项和公差.求在数列中出现奇数次的数.题目保证至多只有一个数符合要求. [题解] 因为只 ...

  8. java web基础环境搭建

    java web基础环境包括:(1)servlet容器也即tomcat(2)jre即java程序运行环境 环境变量配置:分别下载jdk和tomcat安装包. jdk环境变量配置: 第一步:系统环境变量 ...

  9. poj 3250 Bad Hair Day(单调队列)

    题目链接:http://poj.org/problem?id=3250 思路分析:题目要求求每头牛看见的牛的数量之和,即求每头牛被看见的次数和:现在要求如何求出每头牛被看见的次数? 考虑到对于某头特定 ...

  10. SQLServer与Oracle的对照

        近期去铁科院面试,项目组长问了我这样一下问题:SQLServer与Oracle的差别是什么?从进入软件行业.从開始CS的编码到BS的编码过程中使用的都是SQLServer.在半年前開始敲DRP ...