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;

}

最新文章

  1. 【问题】AndroidStudio导入项目一直卡在Building gradle project infod的最快速解决方案
  2. Django URLconf
  3. 利用多核来加速Linux命令行
  4. 自定义View 实现软键盘实现搜索
  5. 汇编cmp比较指令详解
  6. linux中添加环境变量(python为例)
  7. linux任务前后台执行
  8. 使用xUnit为.net core程序进行单元测试(中)
  9. Exp6 信息收集与漏洞扫描
  10. POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】
  11. 深度学习中将类别标签映射到one_hot向量
  12. HTML页面3秒后自动跳转的三种常见方法
  13. (文档)Shader.Find (在编译时,只包含那些使用中的shader或位置在&quot;Resources&quot;文件夹中shader)
  14. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作
  15. seaborn可视化特征的相关性
  16. September 03rd 2017 Week 36th Sunday
  17. PNG透明兼容IE6的几种方法(转)
  18. MPEG2-TS音视频同步原理
  19. 对printf函数的理解1
  20. VMware Workstation的网络连接方式:NAT、桥接和Host Only

热门文章

  1. android Acitivity之间的几种传值方式(^_^)
  2. Java注解和代理实现
  3. 代码审查工具StyleCop
  4. CSS3之firefox&amp;safari背景渐变之争 - [前端技术][转]
  5. C#获得系统打开的端口和状态
  6. python中的函数调用绑定,静态方法和类方法
  7. 注意,ruby循环体定义的变量在结束时后,变量还存在
  8. 剑指offer—第二章算法之二分查找(旋转数组的最小值)
  9. AutoCAD.NET关于Hatch填充
  10. c++11:iota
  11. HDU 5311
  12. HttpClient 设置代理方式
  13. 【转】模块编译Android源码方法
  14. 使用cordova开发app
  15. 201521123004《Java程序设计》第6周学习总结
  16. delegate异步
  17. Spring事务事件监控
  18. 【转】java线上程序排错经验2 - 线程堆栈分析
  19. dma传输数据长度,在启动前必须确保是一个大于0的数字
  20. 基于FPGA摄像头图像采集显示系统