【问题标题】:convert a UTF8 string to a UTF16 string in c++在 C++ 中将 UTF8 字符串转换为 UTF16 字符串
【发布时间】:2013-02-20 06:58:56
【问题描述】:

我正在使用 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: Access Violation。

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

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

【问题讨论】:

    标签: c++ windows visual-c++ zlib


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2012-11-04
      • 2014-02-24
      • 2014-01-29
      • 1970-01-01
      • 2011-01-21
      • 2020-10-11
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多