C++11函数转码

#include <string>
#include <codecvt>

using namespace std;

// utf8转unicode
wstring utf8_to_wstring(const string &str)
{
    wstring_convert<codecvt_utf8<wchar_t>> utf8_cvt;
    return utf8_cvt.from_bytes(str);
}

// unicode转utf8
string wstring_to_utf8(const wstring &str)
{
    wstring_convert<codecvt_utf8<wchar_t>> utf8_cvt;
    return utf8_cvt.to_bytes(str);
}

// gbk转unicode
wstring  gbk_to_wstring(const string &str)
{
    wstring_convert<codecvt<wchar_t, char, mbstate_t>> gbk_cvt(new codecvt<wchar_t, char, mbstate_t>("chs"));
    return gbk_cvt.from_bytes(str);
}

// unicode转gbk
string  wstring_to_gbk(const wstring &str)
{
    wstring_convert<codecvt<wchar_t, char, mbstate_t>> gbk_cvt(new codecvt<wchar_t, char, mbstate_t>("chs"));
    return gbk_cvt.to_bytes(str);
}

// utf8转gbk
string utf8_to_gbk(const string &str)
{
    wstring_convert<codecvt_utf8<wchar_t>> utf8_cvt; // utf8-》unicode转换器
    wstring_convert<codecvt<wchar_t, char, mbstate_t>> gbk_cvt(new codecvt<wchar_t, char, mbstate_t>("chs")); // unicode-》gbk转换器
    wstring t = utf8_cvt.from_bytes(str);
    return gbk_cvt.to_bytes(t);
}

// gbk转utf8
string gbk_to_utf8(const string &str)
{
    wstring_convert<codecvt_utf8<wchar_t>> utf8_cvt; // utf8-》unicode转换器
    wstring_convert<codecvt<wchar_t, char, mbstate_t>> gbk_cvt(new codecvt<wchar_t, char, mbstate_t>("chs")); // unicode-》gbk转换器
    wstring t = gbk_cvt.from_bytes(str);
    return utf8_cvt.to_bytes(t);
} 

 

int main()
{
    locale::global(locale(""));
    string u8str = u8"我爱中国 i love china";
    string str = "我爱中国 i love china";
    wstring w1 = gbk_to_wstring(str);
    str = wstring_to_gbk(w1);
    
    cout << str << endl;
    wcout << w1 << endl;

    return 0;
}

 

转载于:https://www.cnblogs.com/zhaojihui/p/6823297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值