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

 #include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "iconv.h"
#include "eventlist.h" static int ChangeCode( const char* pFromCode, const char* pToCode, const char* pInBuf,
size_t* piInLen, char* pOutBuf, size_t* piOutLen )
{
int iRet;
char **pin = &pInBuf;
char **pout = &pOutBuf;
iconv_t hIconv; //printf("%s: outlen=%d, inlen=%d\n", __FUNCTION__, *piOutLen, *piInLen); //打开字符集转换
hIconv = iconv_open( pToCode, pFromCode );
if ( - == (int)hIconv )
{
perror("iconv_open");
return -;
}
//开始转换
printf("%s: 1 outlen=%d\n", __FUNCTION__, *piOutLen);
iRet = iconv( hIconv, pin, piInLen, pout, piOutLen );
if ( - == iRet )
{
perror("iconv");
return -;
}
printf("%s: 2 outlen=%d\n", __FUNCTION__, *piOutLen); //关闭字符集转换
iconv_close( hIconv ); **pout = '\0';
return iRet;
} static int MAIN_UTFToGb2312(char * pcFrom, char * pcTo, int iMaxToLen)
{
char * psInBuf = NULL;
char * psOutBuf = NULL;
unsigned int iInLen = ;
unsigned int iOutLen = ;
int iRet; iInLen = strlen(pcFrom)+;
psInBuf = (char *)malloc(iInLen);
if ( NULL == psInBuf )
{
return ;
}
memset(psInBuf, 0x0, iInLen);
memcpy(psInBuf, pcFrom, iInLen); iOutLen = iMaxToLen;
psOutBuf = (char *)malloc(iOutLen);
if ( NULL == psOutBuf )
{
free(psInBuf);
psInBuf = NULL;
return ;
}
memset(psOutBuf, 0x0, iOutLen); iRet = ChangeCode( "utf-8", "gb2312", psInBuf, &iInLen, psOutBuf, &iOutLen );
//iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
if ( != iRet )
{
printf("ChangeCode: Error\n");
//return 0;
}
memcpy(pcTo, psOutBuf, iOutLen);
printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen); free(psInBuf);
psInBuf = NULL;
free(psOutBuf);
psOutBuf = NULL; return iOutLen; } static int MAIN_GB2312ToUTF(char * pcFrom, char * pcTo, int iMaxToLen)
{
char * psInBuf = NULL;
char * psOutBuf = NULL;
unsigned int iInLen = ;
unsigned int iOutLen = ;
int iRet; iInLen = strlen(pcFrom)+;
psInBuf = (char *)malloc(iInLen);
if ( NULL == psInBuf )
{
return ;
}
memset(psInBuf, 0x0, iInLen);
memcpy(psInBuf, pcFrom, iInLen); iOutLen = iMaxToLen;
psOutBuf = (char *)malloc(iOutLen);
if ( NULL == psOutBuf )
{
free(psInBuf);
psInBuf = NULL;
return ;
}
memset(psOutBuf, 0x0, iOutLen); iRet = ChangeCode( "gb2312", "utf-8", psInBuf, &iInLen, psOutBuf, &iOutLen );
//iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);
if ( != iRet )
{
printf("ChangeCode: Error\n");
//return 0;
}
memcpy(pcTo, psOutBuf, iOutLen);
printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen); free(psInBuf);
psInBuf = NULL;
free(psOutBuf);
psOutBuf = NULL; return iOutLen; } int main()
{
char strUTF[]={
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,
0x00, 0x00, 0x00
};
char chTmpStr[];
int len = ; memset(chTmpStr, 0x0, );
MAIN_UTF2Gb2312(strUTF, chTmpStr, );
printf("Main: change=%s\n", chTmpStr); return ;
}

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. UVA 529 - Addition Chains,迭代加深搜索+剪枝

    Description An addition chain for n is an integer sequence  with the following four properties: a0 = ...

  2. to_date如何处理毫秒?

    http://blog.csdn.net/jamex/archive/2008/09/08/2899172.aspx to_date如何处理毫秒? 如把"1970-01-01 00:00:0 ...

  3. linux中fork创建进程讲解(转)

    大家知道Linux中创建子进程的一个很好的方法是函数调用fork,但是很多初学者对fork的理解上可能有点困难.我们举个例子来看看fork的用法吧.         大家用fork的时候记住fork是 ...

  4. Linux下查找最大文件

    当我们应用一段时间以后,Linux可能会变得臃肿了,那么,怎么找出一个“path”下的最大文件呢? 可以使用du命令,如: du -sh [dirname|filename] 如:当前目录的大小: d ...

  5. ubuntu texlive 中文的配置方法

    \documentclass[12pt]{article} \usepackage{CJKutf8} \usepackage{indentfirst}%设置第一段缩进,英语中从第二段才有缩进 \use ...

  6. paip.c++ qt 共享库dll的建立

    paip.c++ qt 共享库dll的建立 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  7. paip.c++ qt 外部dll共享库的导入以及引用

    paip.c++ qt 外部dll共享库的导入以及引用 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn. ...

  8. KVC在定义Model类中的妙用

    @我们应用程序使用MVC架构的话,对于处理数据类,我们会单独的定义Model类,在里面为要展示的属性进行初始化赋值,一般採用的方法是通过定义相应的属性,挨个赋值.如今我要介绍的就是通过KVC,key- ...

  9. Win7 扩容磁盘分区

    1.计算机->管理->磁盘管理,磁盘颜色代表意义 主分区:深蓝色: 扩展分区 :绿色的框: 逻辑分区:浅蓝色的分区: 可用空间:绿色分区 2.非主分区扩容 非主分区扩容十分简单,可是须要注 ...

  10. 从头开始-01.C语言环境测试

    在Mac下编写C程序需要以下几步: 编写代码 a>编译:把C语言编译成0和1 b>工具:clang编译器 c>指令:cc -c 文件名.c      编译成功会生成一个. o目标文件 ...