Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool Utf8ToCString( CString& cstr, const char* utf8Str )
- {
- size_t utf8StrLen = strlen(utf8Str);
- if( utf8StrLen == 0 )
- {
- cstr.Empty();
- return true;
- }
- LPTSTR* ptr = cstr.GetBuffer(utf8StrLen+1);
- #ifdef UNICODE
- // CString is UNICODE string so we decode
- int newLen = MultiByteToWideChar(
- CP_UTF8, 0,
- utf8Str, utf8StrLen, ptr, utf8StrLen+1
- );
- if( !newLen )
- {
- cstr.ReleaseBuffer(0);
- return false;
- }
- #else
- WCHAR* buf = (WCHAR*)malloc(utf8StrLen);
- if( buf == NULL )
- {
- cstr.ReleaseBuffer(0);
- return false;
- }
- int newLen = MultiByteToWideChar(
- CP_UTF8, 0,
- utf8Str, utf8StrLen, buf, utf8StrLen
- );
- if( !newLen )
- {
- free(buf);
- cstr.ReleaseBuffer(0);
- return false;
- }
- assert( newLen < utf8StrLen );
- newLen = WideCharToMultiByte(
- CP_ACP, 0,
- buf, newLen, ptr, utf8StrLen
- );
- if( !newLen )
- {
- free(buf);
- cstr.ReleaseBuffer(0);
- return false;
- }
- free(buf);
- #endif
- cstr.ReleaseBuffer(newLen);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement