在c ++中将UTF8字符串转换为UTF16字符串

lil*_*boo 1 c++ windows zlib visual-c++

我正在使用VC 6.0.我的项目是用Unicode编译的.我正在使用zlib 1.1.3来扩展包含我的UTF-8字符串的文件.我在ASCII中得到它,但我保证它全部用英语,所以我可以将它作为UTF8字符串(我可以吗?).

我在Codeproject中使用了建议的函数,如下所示:

WCHAR* SMUUTF8toUTF16(LPCSTR utf8, int* pLen)
{
    WCHAR *ptr = NULL;
    *pLen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    if (*pLen>1)
    {
        ptr = (WCHAR*)malloc(*pLen);

        if (ptr)
        {
            MultiByteToWideChar(CP_UTF8, 0, utf8, -1, ptr, *pLen);
        }
    }

    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

我的代码因这些错误而变得不稳定:1.检测到严重错误c0000374 2. w3wp.exe(NTDLL.DLL)中的第一次机会异常:0xC0000005:访问冲突.

我怀疑有内存泄漏或错误的指针被引用,因为在使用此函数时,我得到了很多上述错误.我的测试还表明,当我不使用它时,堆保持良好的形状而不会被破坏.

你能否建议更好地实现这个问题?

lib*_*rik 6

MultiByteToWideChar返回输出中的16位Unicode字符数- 而不是字节数.但是malloc需要字节数.您必须将字符数乘以字符的字节大小,否则您只需分配一半所需的字节数!

ptr = (WCHAR *)malloc(sizeof(WCHAR) * *pLen);
Run Code Online (Sandbox Code Playgroud)