簡體   English   中英

在C ++中將UTF8字符串轉換為UTF16字符串

[英]convert a UTF8 string to a UTF16 string in 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;
}

我的代碼由於以下錯誤而變得不穩定:1.檢測到嚴重錯誤c0000374 2. w3wp.exe(NTDLL.DLL)中的首次機會異常:0xC0000005:訪問沖突。

我懷疑存在內存泄漏或引用了錯誤的指針,因為使用此功能時會遇到很多上述錯誤。 我的測試還表明,當我不使用它時,堆會保持良好的格式並且不會損壞。

您能建議一個更好的解決方案嗎?

MultiByteToWideChar返回輸出中的16位Unicode字符數- 而不是字節數。 但是malloc需要字節數。 您必須將字符數乘以字符的字節大小,否則只能分配所需字節數的一半!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM