iconv 编译在vs2012

iconv库可以实现文字格式转换,VLC在DVB的SI信息中,字符(如SDT节目名字、提供商,和EIT等)解析显示用到这个库

1.1. 下载 iconv 库并解压,目前最新版本为 1.14
http://ftp.gnu.org/pub/gnu/libiconv/
2. VC6新建win32静态库工程,libIconv。复制iconv库lib文件夹所有文件到工程文件夹下
3. 将config.h.in改名为config.h
4. 将libcharset/lib/localcharset.c复制过来
5. 将include文件夹下iconv.h.in复制过来,改名为iconv.h
6. 将库中scrLib/localcharset.h复制过来
7. 工程属性, C/C++, Preprocssor, Addtional include diretory增加当前文件夹”.”
8. 修改 iconv.h :
a. 删除所有的 @ 符号,
b. 注释掉/DLL_VARIABLE/,
c. ICONV_CONST改为const,
9. 修改localcharset.c:
注释掉 #include “configmake.h”
10. 把有main函数的.c文件删掉

生成libIconv.lib,头文件即iconv.h

#include "iconv.h"
#pragma comment(lib, "libIconv.lib")

int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen)  
{  
    iconv_t cd;  
    const char *temp = inbuf;  
    const char **pin = &temp;  
    char **pout = &outbuf;  
    memset(outbuf,0,outlen);  
    cd = iconv_open(to_charset,from_charset);  
    if(cd==0) return -1;  
    if(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;  
    iconv_close(cd);  
    return 0;  
}  

/*UTF8תΪGB2312*/  
std::string u2a(const char *inbuf)  
{  
    size_t inlen = strlen(inbuf);  
    char * outbuf = new char[inlen * 2 + 2];  
    std::string strRet;  
    if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)  
    {  
        strRet = outbuf;  
    }  
    delete [] outbuf;  
    return strRet;  
}  

/*GB2312תΪUTF8*/  
std::string a2u(const char *inbuf)  
{  
    size_t inlen = strlen(inbuf);  
    char * outbuf = new char[inlen * 2 + 2];  
    std::string strRet;  
    if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)  
    {  
        strRet = outbuf;  
    }  
    delete [] outbuf;  
    return strRet;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值