- 论坛徽章:
- 0
|
//CodeConverter.h
#ifndef __CODE_CONVERTER__
#define __CODE_CONVERTER__
#include <iconv.h>
#include <iostream>
#define OUTLEN 255
namespace std{
class CodeConverter {
private:
iconv_t cd;
public:
CodeConverter(const char *from_charset,
const char *to_charset)
{
cd = iconv_open(to_charset,from_charset);
}
~CodeConverter()
{
iconv_close(cd);
}
// 转换输出
int convert(char *inbuf,int inlen,char *outbuf,
int outlen)
{
char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
return iconv(cd,pin,(size_t *)&inlen,
pout,(size_t *)&outlen);
}
};
}
#endif
//main.cpp
#include <iostream>
#include "CodeConverter.h"
using namespace std;
int main(int argc, char **argv)
{
string in_utf8 = "姝e?ㄥ??瑁?";
string in_gb2312 = "正在安装";
char out[OUTLEN];
// utf-8-->gb2312
CodeConverter cc = CodeConverter("utf-8","gb2312");
cc.convert(const_cast<char *>( in_utf8.c_str()),strlen(const_cast<char *
>( in_utf8.c_str())),out,OUTLEN);
cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;
// gb2312-->utf-8
CodeConverter cc2 = CodeConverter("gb2312","utf-8");
cc2.convert(const_cast<char*> (in_gb2312.c_str()),strlen(const_cast<char
*> (in_gb2312.c_str())) ,out,OUTLEN);
cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
} |
|