wstring和utf8编码的string之间互相转:
wstring2utf8string()
utf8string2wstring()
wstring和本地编码的string之间的互相转换
wstring2string()
string2wstring()
utf8编码的string和本地编码的string之间互相转换
ansi2utf8()
utf82ansi()
折腾了好久,终于找到了一个稍微靠谱的转换方法了,还不依赖系统API:
// EncodeUtils.h
#pragma once
#include <string>
#include <locale>
#include <codecvt>
namespace EncodeUtils
{
std::string wstring2utf8string(const std::wstring& str)
{
static std::wstring_convert<std::codecvt_utf8<wchar_t> > strCnv;
return strCnv.to_bytes(str);
}
std::wstring utf8string2wstring(const std::string& str)
{
static std::wstring_convert< std::codecvt_utf8<wchar_t> > strCnv;
return strCnv.from_bytes(str);
}
std::string wstring2string(const std::wstring& str, const std::string& locale = "zh-CN")
{
typedef std::codecvt_byname<wchar_t, char, std::mbstate_t> F;
static std::wstring_convert<F> strCnv(new F(locale));
return strCnv.to_bytes(str);
}
std::wstring string2wstring(const std::string& str, const std::string& locale = "zh-CN")
{
typedef std::codecvt_byname<wchar_t, char, std::mbstate_t> F;
static std::wstring_convert<F> strCnv(new F(locale));
return strCnv.from_bytes(str);
}
std::string ansi2utf8(const std::string& ansi, const std::string& local = "zh-CN")
{
std::wstring wtxt = string2wstring(ansi, local);
std::string txt_uft8 = wstring2utf8string(wtxt);
return txt_uft8;
}
std::string utf82ansi(const std::string& utf8, const std::string& local = "zh-CN")
{
std::wstring wtxt = utf8string2wstring(utf8);
std::string txt_ansi = wstring2string(wtxt, local);
return txt_ansi;
}
}