ubuntu下实现C++中GBK转UTF8

需要用到iconv库,引入头文件

#include<iconv.h>

int EncodingConvert(const char* charsetSrc, const char* charsetDest, char* inbuf,
    size_t inSz, char* outbuf, size_t outSz)
{
    iconv_t cd;
    char** pin = &inbuf;
    char** pout = &outbuf;
    cd = iconv_open(charsetDest, charsetSrc);
    if (0 == cd)
    {
        std::cerr << charsetSrc << " to " << charsetDest
        << " conversion not available" << std::endl;
        return -1;
    }

    if (-1 == static_cast<int>(iconv(cd, pin, &inSz, pout, &outSz)))
    {
        std::cerr << "conversion failure" << std::endl;
        return -1;
    }

    iconv_close(cd);
    **pout = '\0';
    return 0;
}

std::string GbkToUtf8(const std::string& str)
{
    size_t len = str.size() * 2 + 1;
    char* temp = new char[len];
    if (EncodingConvert("gb2312", "utf-8", const_cast<char*>(str.c_str()), str.size(), temp, len)
        > = 0)
    {
        std::string res;
        res.append(temp);
        delete[] temp;
        return res;
    }
    else
    {
        delete[]temp;
        return str;
    }
}
如果原代码是char类型数据,可以先用std::string str(char)转换格式后进行输出,最后输出用std::cout<<str 作者:技术叆 https://www.bilibili.com/read/cv30365785/?spm_id_from=333.999.0.0 出处:bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值