| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #pragma once
- #ifdef _WIN32
- #include <codecvt>
- #else
- #endif
- #include <iostream>
- #include <sstream>
- 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);
- #ifdef _WIN32
- 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));
- }
- #else
- #endif
- static std::string DoubleToString(const double value, unsigned int precisionAfterPoint)
- {
- char str[256];
- std::string pre = "%." + to_string(precisionAfterPoint) + "f";
- sprintf(str, pre.c_str(), value);
- string result = str;
- return result;
- }
- };
|