gpt4 book ai didi

c++ - UTF-8 char * 到 CString 的转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:24 30 4
gpt4 key购买 nike

如何将 UTF-8 char* 格式的字符串转换为 CString?

最佳答案

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;
}

虽然这个函数对 UNICODE 和非 UNICODE 配置都有效,但恕我直言,在 Win32 程序中使用 UNICODE 配置效率更高(通常和在这个函数中)。

关于c++ - UTF-8 char * 到 CString 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673194/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com