最近遇到需要将中文在utf8格式和gb2312格式之间的转化,写了一个封装类。
这个类主要利用iconv函数族编程实现。
/*************************************
*头文件 */
/**************************************/
#include <iconv.h>
#include <iostream>
#define OUTLEN 255
using namespace std;
class CodeConverter
{
public:
private:
iconv_t cd;
public:
// 构造
CodeConverter(const char *from_charset,const char *to_charset);
// 析构
~CodeConverter();
// 转换输出
int convert(char *inbuf,int inlen,char *outbuf,int outlen);
};
/*************************************
*实现文件 */
/**************************************/
#include "CodeConverter.h"
// 构造
CodeConverter::CodeConverter(const char *from_charset,const char *to_charset)
{
cd = iconv_open(to_charset,from_charset);
}
// 析构
CodeConverter::~CodeConverter()
{
iconv_close(cd);
}
// 转换输出
int CodeConverter::convert(char *inbuf,int inlen,char *outbuf,int outlen)
{
char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
return iconv(cd,(const char **)pin,(size_t *)&inlen,pout,(size_t *)&outlen);
}
/*************************************
*测试代码 */
/**************************************/
#include <iostream>
#include "CodeConverter.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *in_utf8 = "姝e湪瀹夎";
char *in_gb2312 = "正在安装";
char out[OUTLEN];
// utf-8-->gb2312
CodeConverter cc = CodeConverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);
cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;
// gb2312-->utf-8
CodeConverter cc2 = CodeConverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);
cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
return 0;
}