libiconv的注意项

编译后有用的头文件zlib.h和zconf.h,使用时#include "zlib.h"。

其中有三个核心的函数:

iconv_ticonv_open(constchar*tocode,constchar*fromcode);

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

inticonv_close(iconv_tcd);

iconv_open函数用来打开一个编码转换的流,iconv函数的作用是实际进行转换,iconv_close函数的作用就是关闭这个流。实际用法参见下面的例子,下面是一个将UTF-8码转换成GBK码的例子,我们假设已经有了一个uft8编码的输入缓冲区inbuf以及这个缓冲区的长度inlen。

iconv_tcd=iconv_open("GBK","UTF-8");
char*outbuf=(char*)malloc(inlen*4);
bzero(outbuf,inlen*4);
char*in=inbuf;
char*out=outbuf;
size_toutlen=inlen*4;
iconv(cd,&in,(size_t*)&inlen,&out,&outlen);
outlen=strlen(outbuf);
printf("%s\n",outbuf);
free(outbuf);
iconv_close(cd);

非常值得注意的地方是:iconv函数会修改参数in和参数out指针所指向的地方,也就是说,在调用iconv函数之前,我们的in和inbuf指针以及out和outbuf指针指向的是同一块内存区域,但是调用之后out指针所指向的地方就不是outbuf了,同理in指针。所以要

char*in=inbuf;char*out=outbuf;

另存一下,使用或者释放内存的时候也要使用原先的那个指针outbuf和inbuf。

时间: 2024-12-29 12:04:16

libiconv的注意项的相关文章

编程实践积累

1 编程经验实践,积累,总结,分享 2 3 4 博客地址:http://www.cnblogs.com/liaowanzhong/ 5 6 7 8 9 10 11 12 13 14 15 1. 大量群发邮件:购买Edm服务,大的互联网企业是和邮箱服务商签订协议(百度,腾讯,京东,阿里,csdn) 16 站内信 17 内网发短信:短信猫 18 19 2. Servlet Filter 生命周期 20 *Servlet:看配置文件中web.xml配置其启动的优先级别,即当load-on-startu

利用VS编译libiconv库

参考文章:http://blog.csdn.net/ghevinn/article/details/9834119 关于中文字符编码问题,这篇文章里面讲的很详细-->http://www.tuicool.com/articles/yIjiqm UTF-8编码是用以解决国际上字符的一种多字节编码,是在互联网上使用最广的一种unicode的实现方式.它包含全世界所有国家需要用到的字符,是国际编码,通用性强.一般来说UTF-8可应用于大多数场景,尤其是互联网上,而中文编码主要使用GBK编码,因此这就有

windows平台vs2010编译64位libiconv与libxml2

(一)安装libiconv下载路径https://ftp.gnu.org/pub/gnu/libiconv/注意这里选择libiconv-1.11.1版本,因为之后的版本没有Makefile.msvc文件了.不解...cd D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64vcvars64.batcd PREFIX=D:\espa-product-formatter\XML2\libiconv-1.11.1nmake

LeetCode 442. Find All Duplicates in an Array (在数组中找到所有的重复项)

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements that appear twice in this array. Could you do it without extra space and in O(n) runtime? Example: Input: [4,3,2,7,

mongodb 监控项详解(mms)

mongodb mms监控项 Opcounters :     当前有执行命令的操作(command,query,update,delete,gemore,insert)次数 Connections :      当前与此服务器的活动连接的数量.每个连接分配一个堆栈;因此,非常多的连接会导致严重的RAM使用 page_faults :        页面错误的平均利率这一过程在选定的样本期间每秒 Memory :            驻留,虚拟,映射内存的大小 Network :      

成功产品人必备的20项特质

怎样成为一个好的产品经理?本文通过观察数百位产品经理,总结了产品人必备的20项特质,一起开看看吧,希望对大家有所帮助. 01.从问"为什么"开始 你必须能清晰的回答为什么会有人用你的产品,你的产品能为他们解决生活上的什么难题等这样的问题.你要关注用户写的评论.一旦确定了这个产品的定位和愿景,就一定要围绕这个定位和愿景开发产品.正如亚马逊CEO杰夫.贝佐斯所说:"Be stubborn on the vision, flexible on thedetails."(坚

remove-duplicates-from-sorted-list I&II——去除链表中重复项

I.Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given1->1->2, return1->2.Given1->1->2->3->3, return1->2->3. PS:遍历,而后记录pre,并删除后续重复node 1 /** 2 * Definition for singly-linke

跨过Nginx上基于uWSGI部署Django项目的坑

先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多个协议,如WSGI,HTTP协议,还有它自己的uwsgi协议,想了解更多关于uWSGI和uwsgi协议内容可以查阅这里.这样和fastcgi类似,请求和响应的流程如下: Request > Nginx > uWSGI > Django > uWSGI > Nginx > R

Python统计列表中的重复项出现的次数的方法

前言 在实际工作和学习中,经常会遇到很多重复的数据,但是我们又必须进行统计,所及这里简单介绍一下统计列表中重复项的出现次数的简单方法. 实例 本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下: #方法1: mylist = [1,2,2,2,2,3,3,3,4,4,4,4] myset = set(mylist)  #myset是另外一个列表,里面的内容是mylist里面的无重复 项 for item in myset