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. MySql学习之varchar类型

    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定),在 MySQL5.0以上的版本中,varchar数据 ...

  2. WPF:向客户端发出某一属性值已更改的通知INotifyPropertyChanged接口

    Person.cs using System.ComponentModel; namespace _01_INotifyPropertyChanged { class Person:INotifyPr ...

  3. js中递归解析xml

    xml结构: <RightMenuItems>  <Item Code="New" Name="新建" GroupCode="Edi ...

  4. c++读取文件内容并保存到二维数组

    每行数据最后需要Tab处理 #include <iostream> #include <fstream> #include <string> using names ...

  5. 【转】CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”

    源自:http://www.cnblogs.com/yangbingqi/p/3328610.html 刚安装完CentOS,使用yum命令安装一些常用的软件,使用如下命令:yum grouplist ...

  6. [LeetCode]题解(python):138-Copy List with Random Pointer

    这道题目不是太懂,参考了http://www.cnblogs.com/zuoyuan/p/3745126.html的博客. 题意: A linked list is given such that e ...

  7. [转]printf 函数实现的深入剖析

    研究printf的实现,首先来看看printf函数的函数体 int printf(const char *fmt, ...) { int i; char buf[256];          va_l ...

  8. JAVA并发,锁与方法

    引自:<thinking in java> synchronized void f(){/* ... */}; synchronized void g(){/* ... */}; 所有对象 ...

  9. linux下curl编程

    LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等协议,其主页是http: ...

  10. VS2013 RC 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral.........

    微软发布了vs2013的RC版本,更新了自己机器上的vs,在创建项目过程中,发现出现如题的相关错误,查了相关msdn的资料,才了解到vs已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用 ...