📄 utf82gbk.cpp
字号:
#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;
}
// 不知道iconv内部是如何实现的,必须这样再进行一次赋值才不会出错
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -