方法如下:
std::string gb2312_to_utf8(const std::string &gb2312_str) {
iconv_t cd = iconv_open("UTF-8", "GB2312");
if (cd == (iconv_t)-1) {
std::cerr << "iconv_open failed" << std::endl;
return "";
}
size_t in_len = gb2312_str.size();
size_t out_len = in_len * 2;
char *in_buf = const_cast<char *>(gb2312_str.c_str());
char *out_buf = new char[out_len];
char *out_buf_ptr = out_buf;
if (iconv(cd, &in_buf, &in_len, &out_buf_ptr, &out_len) == (size_t)-1) {
std::cerr << "iconv failed" << std::endl;
iconv_close(cd);
delete[] out_buf;
return "";
}
std::string utf8_str(out_buf, out_buf_ptr - out_buf);
delete[] out_buf;
iconv_close(cd);
return utf8_str;
}