1 #include "../include/charsetconverter.h"
\r
5 CharsetConverter::CharsetConverter()
\r
12 CharsetConverter::CharsetConverter(const std::string &fromcharset, const std::string &tocharset)
\r
14 SetConversion(fromcharset,tocharset);
\r
17 CharsetConverter::~CharsetConverter()
\r
19 if(m_iconv!=(iconv_t)-1)
\r
21 iconv_close(m_iconv);
\r
25 const bool CharsetConverter::SetConversion(const std::string &fromcharset, const std::string &tocharset)
\r
27 if(m_iconv!=(iconv_t)-1)
\r
29 iconv_close(m_iconv);
\r
30 m_iconv=(iconv_t)-1;
\r
32 if((m_iconv=iconv_open(tocharset.c_str(),fromcharset.c_str()))!=(iconv_t)-1)
\r
34 m_fromcharset=fromcharset;
\r
35 m_tocharset=tocharset;
\r
45 const bool CharsetConverter::Convert(const std::string &input, std::string &output)
\r
47 if(m_iconv!=(iconv_t)-1)
\r
49 std::vector<char> invec(input.begin(),input.end());
\r
50 std::vector<char> outvec(invec.size()*4,0);
\r
51 #if defined(_WIN32) || defined(__APPLE__) || defined(__DARWIN__)
\r
52 const char *inptr=&invec[0];
\r
54 char *inptr=&invec[0];
\r
56 char *outptr=&outvec[0];
\r
57 size_t insize=invec.size();
\r
58 size_t outsize=outvec.size();
\r
61 rval=iconv(m_iconv,&inptr,&insize,&outptr,&outsize);
\r
65 outvec.resize(outptr-&outvec[0]);
\r
67 output.append(outvec.begin(),outvec.end());
\r