mirror of
https://github.com/yanyiwu/cppjieba.git
synced 2025-07-18 00:00:12 +08:00
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
#ifndef LIMONP_CODE_CONVERTER_HPP
|
|
#define LIMONP_CODE_CONVERTER_HPP
|
|
|
|
#include <iconv.h>
|
|
#include <iostream>
|
|
#include <memory.h>
|
|
|
|
namespace Limonp
|
|
{
|
|
using namespace std;
|
|
class CodeConverter
|
|
{
|
|
public:
|
|
CodeConverter(const char *from_charset,const char *to_charset)
|
|
{
|
|
iconv__handle = iconv_open(to_charset,from_charset);
|
|
}
|
|
|
|
~CodeConverter()
|
|
{
|
|
iconv_close(iconv__handle);
|
|
}
|
|
|
|
bool convert(const string& from, string& to) const
|
|
{
|
|
char * pfrom = (char*)from.c_str();
|
|
size_t from_size = from.size();
|
|
to.resize(from_size * 2); // iconv failed, may be you can raise this 2 to bigger number.
|
|
char * pto = (char*)to.c_str();
|
|
size_t to_size = to.size();
|
|
if(size_t(-1) == iconv(iconv__handle, &pfrom, &from_size, &pto, &to_size))
|
|
{
|
|
to.clear();
|
|
return false;
|
|
}
|
|
to.resize(to.size() - to_size);
|
|
return true;
|
|
}
|
|
private:
|
|
iconv_t iconv__handle;
|
|
};
|
|
|
|
inline bool code_convert(const char* from_charset, const char* to_charset, const string& from, string& to)
|
|
{
|
|
CodeConverter cc(from_charset, to_charset);
|
|
return cc.convert(from, to);
|
|
}
|
|
}
|
|
|
|
#endif
|