CLewaimaiString.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #pragma once
  2. #ifdef _WIN32
  3. #include <codecvt>
  4. #else
  5. #endif
  6. #include <iostream>
  7. #include <sstream>
  8. class CLewaimaiString
  9. {
  10. public:
  11. CLewaimaiString();
  12. ~CLewaimaiString();
  13. static bool base64_encode(const string& input, string* output);
  14. static bool base64_decode(const string& input, string* output);
  15. static void trim(string &s);
  16. #ifdef _WIN32
  17. static std::string UnicodeToUTF8(const std::wstring & wstr)
  18. {
  19. std::string ret;
  20. try {
  21. std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
  22. ret = wcv.to_bytes(wstr);
  23. }
  24. catch (const std::exception & e) {
  25. std::cerr << e.what() << std::endl;
  26. }
  27. return ret;
  28. }
  29. static std::wstring UTF8ToUnicode(const std::string & str)
  30. {
  31. std::wstring ret;
  32. try {
  33. std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
  34. ret = wcv.from_bytes(str);
  35. }
  36. catch (const std::exception & e) {
  37. std::cerr << e.what() << std::endl;
  38. }
  39. return ret;
  40. }
  41. static std::string UnicodeToANSI(const std::wstring & wstr)
  42. {
  43. std::string ret;
  44. std::mbstate_t state = {};
  45. const wchar_t *src = wstr.data();
  46. size_t len = std::wcsrtombs(nullptr, &src, 0, &state);
  47. if (static_cast<size_t>(-1) != len) {
  48. std::unique_ptr< char[] > buff(new char[len + 1]);
  49. len = std::wcsrtombs(buff.get(), &src, len, &state);
  50. if (static_cast<size_t>(-1) != len) {
  51. ret.assign(buff.get(), len);
  52. }
  53. }
  54. return ret;
  55. }
  56. static std::wstring ANSIToUnicode(const std::string & str)
  57. {
  58. std::wstring ret;
  59. std::mbstate_t state = {};
  60. const char *src = str.data();
  61. size_t len = std::mbsrtowcs(nullptr, &src, 0, &state);
  62. if (static_cast<size_t>(-1) != len) {
  63. std::unique_ptr< wchar_t[] > buff(new wchar_t[len + 1]);
  64. len = std::mbsrtowcs(buff.get(), &src, len, &state);
  65. if (static_cast<size_t>(-1) != len) {
  66. ret.assign(buff.get(), len);
  67. }
  68. }
  69. return ret;
  70. }
  71. static std::string UTF8ToANSI(const std::string & str)
  72. {
  73. return UnicodeToANSI(UTF8ToUnicode(str));
  74. }
  75. static std::string ANSIToUTF8(const std::string & str)
  76. {
  77. return UnicodeToUTF8(ANSIToUnicode(str));
  78. }
  79. #else
  80. #endif
  81. static std::string DoubleToString(const double value, unsigned int precisionAfterPoint)
  82. {
  83. char str[256];
  84. std::string pre = "%." + to_string(precisionAfterPoint) + "f";
  85. sprintf(str, pre.c_str(), value);
  86. string result = str;
  87. return result;
  88. }
  89. };