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
46 const bool CharsetConverter::Convert(const std::string &input, std::string &output)
\r
48 if(m_iconv!=(iconv_t)-1)
\r
50 std::vector<char> invec(input.begin(),input.end());
\r
51 std::vector<char> outvec(invec.size()*4,0);
\r
52 #if defined(_WIN32) || defined(__APPLE__) || defined(__DARWIN__)
\r
53 const char *inptr=&invec[0];
\r
55 char *inptr=&invec[0];
\r
57 char *outptr=&outvec[0];
\r
58 size_t insize=invec.size();
\r
59 size_t outsize=outvec.size();
\r
62 rval=iconv(m_iconv,&inptr,&insize,&outptr,&outsize);
\r
66 outvec.resize(outptr-&outvec[0]);
\r
68 output.append(outvec.begin(),outvec.end());
\r