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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM