| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #pragma once
- #include <codecvt>
- #include <iostream>
- using namespace std;
- class CLewaimaiString
- {
- public:
- CLewaimaiString();
- ~CLewaimaiString();
- static bool base64_encode(const string& input, string* output);
- static bool base64_decode(const string& input, string* output);
- static void trim(string &s);
- static std::string UnicodeToUTF8(const std::wstring & wstr)
- {
- std::string ret;
- try {
- std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
- ret = wcv.to_bytes(wstr);
- }
- catch (const std::exception & e) {
- std::cerr << e.what() << std::endl;
- }
- return ret;
- }
- static std::wstring UTF8ToUnicode(const std::string & str)
- {
- std::wstring ret;
- try {
- std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
- ret = wcv.from_bytes(str);
- }
- catch (const std::exception & e) {
- std::cerr << e.what() << std::endl;
- }
- return ret;
- }
- static std::string UnicodeToANSI(const std::wstring & wstr)
- {
- std::string ret;
- std::mbstate_t state = {};
- const wchar_t *src = wstr.data();
- size_t len = std::wcsrtombs(nullptr, &src, 0, &state);
- if (static_cast<size_t>(-1) != len) {
- std::unique_ptr< char[] > buff(new char[len + 1]);
- len = std::wcsrtombs(buff.get(), &src, len, &state);
- if (static_cast<size_t>(-1) != len) {
- ret.assign(buff.get(), len);
- }
- }
- return ret;
- }
- static std::wstring ANSIToUnicode(const std::string & str)
- {
- std::wstring ret;
- std::mbstate_t state = {};
- const char *src = str.data();
- size_t len = std::mbsrtowcs(nullptr, &src, 0, &state);
- if (static_cast<size_t>(-1) != len) {
- std::unique_ptr< wchar_t[] > buff(new wchar_t[len + 1]);
- len = std::mbsrtowcs(buff.get(), &src, len, &state);
- if (static_cast<size_t>(-1) != len) {
- ret.assign(buff.get(), len);
- }
- }
- return ret;
- }
- static std::string UTF8ToANSI(const std::string & str)
- {
- return UnicodeToANSI(UTF8ToUnicode(str));
- }
- static std::string ANSIToUTF8(const std::string & str)
- {
- return UnicodeToUTF8(ANSIToUnicode(str));
- }
- };
|