iconv基于GPL公开源代码,是GNU项目的一部分,在各种Unix-like操作系统下很容易编译和使用,而在Windows下编译iconv就没那么简单了。</span>
官方网站:http://ftp.gnu.org/pub/gnu/libiconv/
最新版的iconv(目前是libiconv-1.14.tar.gz)已经不再提供Visual C++的编译文件,最后一个支持VC编译的iconv版本是libiconv-1.11.1.tar.gz。虽然不是最新版,但是在Windows下编译,只好将就了,功能应该差不了多少。
下载libiconv-1.11.1.tar.gz并解压,打开命令提示行,进入libiconv-1.11.1目录,输入命令:nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD PREFIX=C:\iconv install等待编译结束后就能在C:\iconv找到相应的头文件和库文件了。
iconv.exe --version
iconv (GNU libiconv 1.11) Copyright (C) 2000-2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Bruno Haible.
高版本编译方法,未测试
————————————————————————————————————————
一、首先准备文件:
1. 下载 Iconv 库,目前最新为 1.31
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
2. 去 www.d2school.com 下载iconvpp
(这个不是必须的,但其提供了C++的封装,使用起来很方便,感谢nanyu老师)。
libiconv-1.13.1.tar.gz 解压到 zipDir
创建 解决方案目录 ProjectDir
zipDir:IConv的打包文件解压目录
ProcjectDir : 工程编译主目录
二、合并文件
1. 复制 iconvpp.cpp 到 ProjectDir
2. 复制 ZipDir/Lib/下的所有文件到 ProjectDir/_IConv/ (包括子文件夹)
3. 复制 ZipDir/Include/IConv.h.in 到 ProjectDir/_IConv/IConv.h
4. 复制 ZipDir/scrLib/localcharset.h 到 ProjectDir/_IConv/
5. 复制 ZipDir/libcharset/lib/localcharset.c 到 ProjectDir/_IConv
6. 改名 ProjectDir/_IConv/Config.h.in -> config.h
以下是批处理
@echo 将所有文件复制到这个目录下 :_IConv
pause
md _IConv
copy lib/* _IConv/
copy include/IConv.h.in _IConv/IConv.h
copy srcLib/localcharset.h _IConv/
copy libcharset/lib/localcharset.c _IConv/
ren _IConv/Config.h.in Config.h
@echo 目录文件生成成功。
pause
OK 以上完成了全部文件的准备(在_IConv下)。
三、下面用VS2008建工程~:
1. 建一个Win32 工程,工程名称为IconvLib ,钩选“创建解决方案目录”,选择"静态链接库", 不选“预编译头”,完成。
2. 将 _IConv 目录 复制过来。
3. 将 iconvpp 中的 include 与 src 复制过来。
目录结构如下:
─ProjectDir
├─IconvLIB
├─iconvpp
│ ├─include
│ │ └─iconvpp
│ └─src
└─_IConv
4. 添加现有项,将 iconvpp.cpp , iconv.c ,localcharset.c 添加到工程中.
5. 工程属性->C/C++ –>附加包含目录:../_iconv;../iconvpp/include;
6. 工程属性->C/C++ ->代码生成->运行时库->多线程调试(/MTd)
这时如果编译会有一堆错误,下面我们来修改一些位置。
四、修改文件内容:
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"
OK 文件修改完成,这时候编译,就可以通过了~。
五、测试
新建一个控制台工程。
设置工程属性头文件包含:_iconv和 iconvpp/include 两个目录。
链接 debug/IconvLIB.lib
运行时库->多线程调试(/MTd)
#include "iconvpp/iconvpp.h"
using namespace Iconvpp;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str;
str= Utf8Convert::from_wstring(L"This is a test string~");
printf("%s",str.c_str());
return 0;
}
最终目录结构如下:
─ProjectDir
├─Debug
├─ExeTest
│ └─Debug
├─IconvLIB
│ └─Debug
├─iconvpp
│ ├─include
│ │ └─iconvpp
│ └─src
└─_IConv
六、 结束