- #include <iostream>
- #include <iconv.h>
- using namespace std;
-
- string IConvert(const string &sInput)
- {
-
- string sOutput;
- char *pin = (char*)sInput.data();
- size_t inlen = sInput.length() * 4;
- size_t outlen = inlen;
- char *pout = new char[outlen];
- memset(pout, 0, outlen);
-
- iconv_t cd = 0;
- if((cd = iconv_open("gbk", "utf-8")) == (iconv_t)-1)
- {
- cout < "iconv open fail \n";
- return sOutput;
- }
-
-
- char *pin1 = pin, *pout1 = pout;
- char **ppin = & pin1;
- char **ppout = & pout1;
- size_t inleft = inlen, outleft = outlen;
- if(iconv(cd, (const char**)ppin, &inleft, ppout, &outleft) == size_t(-1))
- {
- iconv_close(cd);
- cout < "convert fail\n" < errno < endl;
- return sOutput;
- }
- iconv_close(cd);
-
- sOutput.assign(pout, outlen - outleft);
-
- delete []pout;
-
- return sOutput;
- };
-
- int main(int argc, char* argv[])
- {
- cout < argv[1] < endl;
- string utf8str(argv[1]);
- cout < utf8str < endl;
- cout < IConvert(utf8str) < endl;;
- return 0;
- }
|