用c++将UTF8字符串转换为UTF16字符串

convert a UTF8 string to a UTF16 string in c++

本文关键字:字符串 转换 UTF16 UTF8 c++      更新时间:2023-10-16

我使用的是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;
}

我的代码由于以下错误而变得不稳定:1.检测到严重错误c00003742.w3wp.exe(NTDLL.DLL)中的首次机会异常:0xC0000005:访问冲突。

我怀疑是内存泄漏或引用了错误的指针,因为在使用此函数时,我会遇到很多上面提到的错误。我的测试还表明,当我不使用它时,堆会保持良好的形式,不会损坏。

你能为这个问题提出一个更好的实施方案吗?

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

ptr = (WCHAR *)malloc(sizeof(WCHAR) * *pLen);