CLewaimaiString.h 2.2 KB

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