编码文本转换始终失败

时间:2015-02-02 18:04:09

标签: c++ c

int conv_utf8_to_ucs2(const char* src, size_t len)
{
    iconv_t cb = iconv_open("UTF-16", "UTF-8");
    if (cb == (iconv_t)(-1))
        return 0;

    uint16_t* outBuff = new uint16_t[len + 1];
    char* pout = (char*)outBuff;
    size_t inRemains = len;
    size_t outRemains = len * sizeof(uint16_t);

    printf("inRemains:%d outRemains:%d\n", (int)inRemains, (int)outRemains);

    size_t cvtlen = iconv(cb, &src, (size_t*)&inRemains, (char**)&pout, (size_t*)&outRemains);
    if (cvtlen == (size_t)-1) {
        //CONVERSION ALWAYS FAILS
        goto out;
    }
    *pout = 0;

    printf("inRemains:%d outRemains:%d cvtlen:%d\n", (int)inRemains, (int)outRemains, (int)cvtlen);

    for (int i = 0; (i < len) && outBuff[i]; i++)
        printf("0x%04x\n", outBuff[i]);

out:
    if (outBuff)
        delete[] outBuff;
    iconv_close(cb);

    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
     char utf8_str[] = "안녕 세상아?";
     int len = strlen(utf8_str);

     conv_utf8_to_ucs2(utf8_str, len);

     return 0;
}

我有这个小程序将UTF8的字符串转换为UTF16,但iconv函数总是返回-1。我调试进入它的实现,但找不到任何提示。有人可以提供对此libiconv用法的深入了解吗?

0 个答案:

没有答案