#include <iostream>
#include <string>
using namespace std;
class chs_codecvt : public codecvt_byname<wchar_t, char, std::mbstate_t> {
public:
chs_codecvt(string s) : codecvt_byname(s) {
}
};
class ZJ_Char {
public:
static string Utf8ToGbk(string);
static string GbkToUtf8(string);
static wstring Utf8ToUnicode(string);
static wstring GbkToUnicode(string);
static string UnicodeToUtf8(wstring);
static string UnicodeToGbk(wstring);
};
//
// Created by zhu on 19-5-22.
//
#include <locale>
#include <codecvt>
#include "ZJ_Char.h"
wstring ZJ_Char::GbkToUnicode(string str) {
// codecvt_byname<wchar_t, char, mbstate_t>*dd=;
wstring_convert<chs_codecvt> gbk(new chs_codecvt("zh_CN.GBK")); //GBK - whar
return gbk.from_bytes(str);
}
string ZJ_Char::GbkToUtf8(string str) {
return UnicodeToUtf8(GbkToUnicode(str));
}
string ZJ_Char::Utf8ToGbk(string str) {
return UnicodeToGbk(Utf8ToUnicode(str));
}
wstring ZJ_Char::Utf8ToUnicode(string str) {
wstring ret;
wstring_convert<codecvt_utf8<wchar_t>> wcv;
ret = wcv.from_bytes(str);
return ret;
}
string ZJ_Char::UnicodeToUtf8(wstring wstr) {
string ret;
wstring_convert<codecvt_utf8<wchar_t>>wcv;
ret = wcv.to_bytes(wstr);
return ret;
}
string ZJ_Char::UnicodeToGbk(wstring wstr) {
wstring_convert<chs_codecvt> gbk(new chs_codecvt("zh_CN.GBK")); //GBK - whar
string ret = gbk.to_bytes(wstr);
return ret;
}