iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码

iconv最新版本号仅仅支持MingW和Cygwin编译

1. 下载 iconv 库并解压,眼下最新版本号为 1.14

         http://ftp.gnu.org/pub/gnu/libiconv/

2、新建一个VC空project(libIconv)

(1)libIconvproject下新建一个目录Iconv

(2)将下载的库中lib目录下的全部文件复制到这个目录下

(3)将烤入到Iconv目录下的config.h.in重命名为config.h

(3)将库中libcharset/lib/localcharset.c文件复制到这个目录下

(4)将库中include目录下iconv.h.in文件重命名为iconv.h放在Iconv目录下

(5)将库中scrLib/localcharset.h文件拷到Iconv目录下

3、project中加入现有项,将 iconv.c ,localcharset.c 加入到project中.

4、project属性->C/C++ –>附加包括文件夹:../Iconv;

5、project属性:常规->配置类型->静态库(.lib)

6、改动文件里的BUG:

(1) iconv.h :

1).删除掉全部的 @ 符号 (14处) 

2).改动25行: extern DLL_VARIABLE int _libiconv_version;

为  extern /*DLL_VARIABLE*/ int _libiconv_version;  

3).改动83行:extern size_t iconv (iconv_t cd, ICONV_CONST char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

为 extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

(2)localcharset.c:

凝视掉76行:  # include "configmake.h"

7、右击解决方式。选择生成解决方式。

得libIconv.lib静态链接库。头文件是iconv.h(Iconv目录下)

使用:

#include <iostream>

#include <string>

using namespace std;

#include "iconv.h"

#pragma comment(lib,"iconv.lib")





int code_convert(char *from_charset,char *to_charset,const char *inbuf, size_t inlen,char *outbuf, size_t outlen)

{

iconv_t cd;

const char **pin = &inbuf;

char **pout = &outbuf;





cd = iconv_open(to_charset,from_charset);

if (cd==0) return -1;

memset(outbuf,0,outlen);

if (iconv(cd, pin, &inlen,pout, &outlen)==-1) return -1;

iconv_close(cd);

return 0;

}





* UTF-8 to GBK  */

int u2g(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)

{

return code_convert("UTF-8","GBK",inbuf,inlen,outbuf,outlen);

}





* GBK to UTF-8 */

int g2u(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)

{

return code_convert("GBK", "UTF-8", inbuf, inlen, outbuf, outlen);

}





void readFile(const char* pchFileName,string &strFileContent)

{

char* buffer = NULL;

int nLen = 0;

FILE *fp = fopen(pchFileName,"rb");

if (fp == NULL)

{

cout << pchFileName << " open failed!" << endl;

exit(1);

}





fseek(fp,0L,SEEK_END);      //文件指针移到文件尾  

long fsize = ftell(fp);     //得到当前指针位置,既文件的长度

rewind(fp);                 //文件指针恢复到文件头位置

//动态申请空间,为保存字符串结尾标志'\0'。多申请一个字符的空间。

buffer = (char*)malloc(sizeof(char)*fsize+1);

if (buffer == NULL)

{

cout << "memory error!" << endl;

fclose(fp); //不再使用文件,关闭

exit(1);

}





nLen=fread(buffer,sizeof(char),fsize,fp);

buffer[nLen] = '\0';//加入字符串结尾标志

string strBuffer(buffer);

strFileContent = strBuffer;

free(buffer);

buffer = NULL;//释放后也要把指针设成NULL。避免野指针。

fclose(fp);

}





int main()

{





string strFileContent;

readFile("3.txt",strFileContent);

cout << strFileContent << endl;





size_t iInBytes,oOutBytes;

iInBytes = strFileContent.length();

oOutBytes = 3*iInBytes+1;

char *pchDestStr = new char[oOutBytes];

memset(pchDestStr,0,oOutBytes);

g2u(strFileContent.c_str(),iInBytes,pchDestStr,oOutBytes);

cout << pchDestStr << endl;



system("pause");

return 0;

}

VS2008编译iconv静态链接库的更多相关文章

  1. VS2010编译Boost 1.57 静态链接库

    http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...

  2. App开发流程之数据持久化和编译静态链接库

    先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Co ...

  3. GCC 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  4. GCC 编译使用动态链接库和静态链接库的方法

    1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...

  5. 【转】gcc 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  6. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  7. [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

    来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...

  8. go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]

    go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...

  9. GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造

    go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...

随机推荐

  1. windows8 安装IIS 和 添加网站(转)

    Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows NT版本的可选 ...

  2. 搭建Hadoop集群 (二)

    前面的步骤请看  搭建Hadoop集群 (一) 安装Hadoop 解压安装 登录master, 下载解压hadoop 2.6.2压缩包到/home/hm/文件夹. (也可以从主机拖拽或者psftp压缩 ...

  3. Android学习路径图

    一个PHPer转战Android学习过程: 直接跨过java的学习,原因有我之前看过毕向东和张孝祥的Java基础课程,虽然中间好几次看睡着,但java的环境是能跑起来的.我建议大家如果没有Java基础 ...

  4. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

  5. 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET

    让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET 让 QtWebkit 支持跨域CROS 2013-05-23 22:05 450人阅读 评论 ...

  6. 多名Uber司机被指刷单遭封号 一周薪水为0

    昨天,一司机在Uber“司机之家”办公地墙上写了泄愤的话 摄/法制晚报记者 苏妮 司机展示的账单显示,上周的薪水几乎为零,上面用英文标注了“欺诈行为”的字样 摄/法制晚报记者 苏妮 法制晚报讯(记者 ...

  7. MySQL性能调优的方法

    第一种方法 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的 性能,我们可以将表中字 ...

  8. (HLS播放器之中的一个)HLS协议之M3U8解析

    參照 http://tools.ietf.org/html/draft-pantos-http-live-streaming-08, 能够对M3U8有比較系统的认识. HLS(HTTP Live St ...

  9. jade初学

    jade是一个比ejs略难得模板.express的默认模本就是jade. 今天看了一下其实不是太难~~ 笔记: jade中使用缩进来定义HTML文档的层次结构 jade不需要关闭标签 给div添加id ...

  10. [Jobdu] 题目1521:二叉树的镜像

    不知道怎么回事下面的代码通过了4个测试用例,还有1个测试用例始终是Runtime Error,各位帮我看一下是哪里出了问题 镜像输出两种方法,一种是递归进行调整,另外一种就是直接在先序遍历的基础上进行 ...