--- a/common/Strings.cpp
|
|
+++ b/common/Strings.cpp
|
|
@@ -12,7 +12,8 @@
|
|
#ifdef _WINDOWS
|
|
#include <windows.h>
|
|
#else
|
|
-#include <iconv.h>
|
|
+#include <locale>
|
|
+#include <codecvt>
|
|
#endif
|
|
#include <algorithm>
|
|
#include <sstream>
|
|
@@ -50,35 +51,8 @@ std::wstring TelldusCore::charToWstring(
|
|
return retval;
|
|
|
|
#else
|
|
- size_t utf8Length = strlen(value);
|
|
- size_t outbytesLeft = utf8Length*sizeof(wchar_t);
|
|
-
|
|
- // Copy the instring
|
|
- char *inString = new char[utf8Length+1];
|
|
- snprintf(inString, utf8Length+1, "%s", value);
|
|
-
|
|
- // Create buffer for output
|
|
- char *outString = reinterpret_cast<char*>(new wchar_t[utf8Length+1]);
|
|
- memset(outString, 0, sizeof(wchar_t)*(utf8Length+1));
|
|
-
|
|
-#ifdef _FREEBSD
|
|
- const char *inPointer = inString;
|
|
-#else
|
|
- char *inPointer = inString;
|
|
-#endif
|
|
- char *outPointer = outString;
|
|
-
|
|
- iconv_t convDesc = iconv_open(WCHAR_T_ENCODING, "UTF-8");
|
|
- iconv(convDesc, &inPointer, &utf8Length, &outPointer, &outbytesLeft);
|
|
- iconv_close(convDesc);
|
|
-
|
|
- std::wstring retval( reinterpret_cast<wchar_t *>(outString) );
|
|
-
|
|
- // Cleanup
|
|
- delete[] inString;
|
|
- delete[] outString;
|
|
-
|
|
- return retval;
|
|
+ std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
|
|
+ return converter.from_bytes(value);
|
|
#endif
|
|
}
|
|
|
|
@@ -211,19 +185,8 @@ std::string TelldusCore::wideToString(co
|
|
#else
|
|
char *inPointer = inString;
|
|
#endif
|
|
- char *outPointer = outString;
|
|
-
|
|
- iconv_t convDesc = iconv_open("UTF-8", WCHAR_T_ENCODING);
|
|
- iconv(convDesc, &inPointer, &wideSize, &outPointer, &outbytesLeft);
|
|
- iconv_close(convDesc);
|
|
-
|
|
- std::string retval(outString);
|
|
-
|
|
- // Cleanup
|
|
- delete[] inString;
|
|
- delete[] outString;
|
|
-
|
|
- return retval;
|
|
+ std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
|
|
+ return converter.to_bytes(input);
|
|
#endif
|
|
}
|
|
|