--- a/common/Strings.cpp +++ b/common/Strings.cpp @@ -12,7 +12,8 @@ #ifdef _WINDOWS #include #else -#include +#include +#include #endif #include #include @@ -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(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(outString) ); - - // Cleanup - delete[] inString; - delete[] outString; - - return retval; + std::wstring_convert> 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> converter; + return converter.to_bytes(input); #endif }