c++ 万能 编码转换函数 UTF-8 GBK UTF-16 USC-2 USC-4

/**
 * 字符串编码格式转换
 * @param from	原始编码方式
 * @param to	目标编码方式
 * @param str	源字符串
 * @return	转换编码方式后的字符串
 */
string StringUtil::trancoding(const string& from, const string& to, const string& str){
	//TODO UCS-2可以看成是 UTF-16的子集 已测试编码 GBK UCS GTU-8 UTF-16 C99
    std::string result;
	const char* cstrfrom = from.c_str();
	const char* cstrto = to.c_str();
    // 创建转换句柄
    iconv_t iconv_handle = iconv_open(cstrto, cstrfrom);
    if (iconv_handle == (iconv_t)(-1)) {
    	_ERR_("Failed to open iconv");
        return result;
    }
    // 输入参数
    char* input_str = const_cast<char*>(str.c_str());
    size_t input_size = str.size();
    // 输出参数
    const size_t buffer_size = input_size * sizeof(wchar_t);
    char* output_buffer = new char[buffer_size];
    char* output_str = output_buffer;
    size_t output_size = buffer_size;

    // 进行转换
    if (iconv(iconv_handle, &input_str, &input_size, &output_str, &output_size) == (size_t)-1) {
        _ERR_("Failed to convert");
        iconv_close(iconv_handle);
        delete[] output_buffer;
        return result;
    }

    // 关闭转换句柄
    iconv_close(iconv_handle);
    // 保存转换结果
    size_t out_size = buffer_size - output_size;
    result.assign(output_buffer, out_size);
    delete[] output_buffer;
    return result;
}

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值