Advertisement
JulianoLoren

Conversion of UTF-8 char * to CString

Apr 22nd, 2012
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. bool Utf8ToCString( CString& cstr, const char* utf8Str )
  2. {
  3.     size_t utf8StrLen = strlen(utf8Str);
  4.  
  5.     if( utf8StrLen == 0 )
  6.     {
  7.         cstr.Empty();
  8.         return true;
  9.     }
  10.  
  11.     LPTSTR* ptr = cstr.GetBuffer(utf8StrLen+1);
  12.  
  13. #ifdef UNICODE
  14.     // CString is UNICODE string so we decode
  15.     int newLen = MultiByteToWideChar(
  16.                      CP_UTF8,  0,
  17.                      utf8Str, utf8StrLen,  ptr, utf8StrLen+1
  18.                      );
  19.     if( !newLen )
  20.     {
  21.         cstr.ReleaseBuffer(0);
  22.         return false;
  23.     }
  24. #else
  25.     WCHAR* buf = (WCHAR*)malloc(utf8StrLen);
  26.  
  27.     if( buf == NULL )
  28.     {
  29.         cstr.ReleaseBuffer(0);
  30.         return false;
  31.     }
  32.  
  33.     int newLen = MultiByteToWideChar(
  34.                      CP_UTF8,  0,
  35.                      utf8Str, utf8StrLen,  buf, utf8StrLen
  36.                      );
  37.     if( !newLen )
  38.     {
  39.         free(buf);
  40.         cstr.ReleaseBuffer(0);
  41.         return false;
  42.     }
  43.  
  44.     assert( newLen < utf8StrLen );
  45.     newLen = WideCharToMultiByte(
  46.                      CP_ACP,  0,
  47.                      buf, newLen,  ptr, utf8StrLen
  48.                      );
  49.     if( !newLen )
  50.     {
  51.         free(buf);
  52.         cstr.ReleaseBuffer(0);
  53.         return false;
  54.     }
  55.  
  56.     free(buf);
  57. #endif
  58.  
  59.     cstr.ReleaseBuffer(newLen);
  60.     return true;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement