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. Android安装应用失败UID 和 PID

    参考:http://blog.sina.com.cn/s/blog_62ef2f140101j6q2.html 安装任意第三方的一个apk,恢复出厂设置,再次安装相同的apk,提示安装失败,通过打印L ...

  2. 通过class类来实例化其他类的对象(使用有参构造函数)

    import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; class Pers ...

  3. 服务器响应HTTP请求状态码(转)

    当服务器响应HTTP请求时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明: 1.客户方错误: 100 客户必须继续发出请求 101 客户要求服务器根据请求转换HTTP协议版本 2. ...

  4. Linux菜鸟之路[4]-cal,date,bc,echo $LANG,man

    由于前四天一直在看鸟哥的linux书本的计算机的一些基础知识,今天才接触基本的命令,从今天起每天记录一下自己的linux学习过程. cal:日历 cal: cal 2015:列出2015年所有日历 c ...

  5. Eclips入门教程

    1. 插件推荐 Eclipse默认情况下是一个纯净版的,所以功能简单,而开源IDE最为强大的莫过于各种插件,通过使用插件可以帮助我们减少大量编写代码的工作量,也帮助我们降低了编写代码的难度,所以懂得安 ...

  6. Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)

    使用CreateMutex 可以实现只启动一个应用程序实例 view plaincopy to clipboardprint?#include <QApplication>#include ...

  7. HDU 5763 Another Meaning(FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...

  8. openStack openSource CloudComputing

    <一,> ,OpenStack a few Core Compontents integration with openStack-keystone Identity service1.1 ...

  9. iOS加载HTML, CSS代码

    NSString *strHTML = @"<div style=\"text-align:center;\"><img src=\"/Upl ...

  10. 第七届河南省赛B.海岛争霸(并差集)

    B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 130  Solved: 48 [Submit][Status][Web Board] D ...