#include <iostream>
#include <string.h>
#include <iconv.h>
#include<memory>
std::string gbk_to_utf8(const std::string &gbk_str) {
size_t in_len = gbk_str.size();
size_t out_len = in_len * 4; // 设置足够大,确保可以存放转换后的UTF-8字符串
std::unique_ptr<char[]> out_buf(new char[out_len]);
const char *in_buff = gbk_str.c_str();
char *out_buff = out_buf.get();
iconv_t cd = iconv_open("UTF-8", "GBK");
if (cd == (iconv_t)-1) {
perror("iconv_open");
return "";
}
if (iconv(cd, &in_buff, &in_len, &out_buff, &out_len) == (size_t)-1) {
perror("iconv");
iconv_close(cd);
return "";
}
iconv_close(cd);
return std::string(out_buf.get(), out_buff - out_buf.get());
}
int main() {
std::string gbk_str = "你好,世界!"; // GBK编码的字符串
std::string utf8_str = gbk_to_utf8(gbk_str);
std::cout << "UTF-8 string: " << utf8_str << std::endl;
return 0;
}
标签:std,编码,iconv,utf8,gbk,len,str,out From: https://blog.csdn.net/m0_52433622/article/details/139417107