GB2312、UTF-8等编码转换函数iconv()使用方法

原创 2015年11月18日 14:37:48

用于GB2312、UTF-8等字符编码的转换,一次转换需要调如下三个函数:

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

(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。

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

 

注意:iconv函数的出参inbytesleft和outbytesleft的值会改变。

以上函数的使用可以根据需要自己封装成一个函数,万变不离其宗。

#include<stdio.h>
#include<iconv.h>
int main()
{
	char inbuf[30] = "我是一只小小鸟";
	char outbuf[120] = {0};

	iconv_t cd = iconv_open("GBK", "UTF-8");
	char *in = inbuf;
	char *out = outbuf;
	size_t inlen = 30;
	size_t outlen = 120;
	printf("1 in:%p, inbuf:%p, out:%p, outbuf:%p \n", in, out, inbuf, outbuf);
	iconv(cd, &in, (size_t)&inlen, &out, &outlen);
	outlen = strlen(outbuf);
	printf("%s\n", outbuf);
	printf("2 in:%p, inbuf:%p, out:%p, outbuf:%p \n", in, out, inbuf, outbuf);
	iconv_close(cd);
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

PHP iconv 解决utf-8和gb2312编码转换问题

就一个很简单的函数iconv();但是就是这个函数在网上找了很多例子,都无法成功转换,这是为什么呢? 终于皇天不负有心人,答案还是让我找到了。  网上的都是这样用的,代码如下:...
  • qq_15796423
  • qq_15796423
  • 2016年07月07日 16:44
  • 1622

利用iconv进行GB2312和Unicode的互转

利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。 ...
  • rankun1
  • rankun1
  • 2016年03月16日 16:38
  • 1259

iconv("cp1252","UTF-8",$content);无法正常使用的解决方法

遇到乱码问题,弄了半天原来是语句iconv("cp1252","UTF-8",$content); 本身的问题  在参考了php.net的手册里的iconv函数后发现下面有人留言说iconv("cp1...
  • ImGoTop
  • ImGoTop
  • 2009年10月20日 11:45
  • 598

使用iconv进行GBK到BIG5编码转/简繁转换遇到的问题

Linux操作系统中的iconv命令/函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。 在使用它进行GBK到BIG5的编码转换时,遇到"iconv:illeagal input seque...
  • littlefang
  • littlefang
  • 2015年02月27日 10:56
  • 3990

php文件上传后台存储中文乱码问题解决方案

用户上传文件后,我们以它原有的文件名保存(有时是中文),可以用php的move_uploaded_file命令:move_uploaded_file($tempFile, $targetFile); ...
  • u010286868
  • u010286868
  • 2016年01月12日 14:12
  • 395

libIconv库实现中文中字符串与GBK、Unicode、UTF-8三种编码互转

libIconv库实现GBK、Unicode、UTF-8三种编码互转比window api更为简单,而且libIconv库跨平台。 IibIconv库在windows下的编译参照windows下使用V...
  • bladeandmaster88
  • bladeandmaster88
  • 2017年02月01日 23:32
  • 2751

c语言中关于utf-8编码转换为gb2312的问题

在网上查到如下代码: 问题是:输出发现gb2312->utf8是没问题的,但是utf8转为gb2312时发现只转换了英文部分,汉字部分并没有转换,期待高手释疑! #include #inc...
  • songzhichao4444
  • songzhichao4444
  • 2014年01月17日 10:22
  • 1568

ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法(转)

ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法   应用程序代码如下: static int code_convert(char* from...
  • xp5xp6
  • xp5xp6
  • 2016年09月12日 14:23
  • 455

【Node.js】使用iconv-lite解决中文乱码 (GB2312)

By Sodino 作为新手,碰到问题了就google了一下,网上已经有teary:window下nodejs爬取gb2312网页出现乱码的解决方案出来了。本文和上面的作法几乎相同,只是自己不想引用b...
  • sodino
  • sodino
  • 2016年05月12日 17:46
  • 9939

iconv 中文截断问题的解决方法

iconv 中文截断问题的解决方法 今天做了一个采集程序,原理很简单,使用curl方法把对方页面的html获取分析,用正则提取需要的数据并保存在数据库。 由于对方页面是GB2312编码,而本地使...
  • fdipzone
  • fdipzone
  • 2014年12月22日 23:10
  • 26402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GB2312、UTF-8等编码转换函数iconv()使用方法
举报原因:
原因补充:

(最多只允许输入30个字)