C++ 编码文本转换总是失败 int conv_utf8_to_ucs2(常量字符*src,大小长度) { iconv_t cb=iconv_开放(“UTF-16”、“UTF-8”); if(cb==(iconv_t)(-1)) 返回0; uint16_t*exputff=新uint16_t[len+1]; char*pout=(char*)爆发; 尺寸=长度; 尺寸=长度*尺寸(uint16); printf(“inRemains:%d剩余部分:%d\n”,(int)inRemains,(int)剩余部分); 尺寸cvtlen=iconv(cb和src,(尺寸*)和inRemains,(char**)和pout,(尺寸*)和OutLevels); 如果(cvtlen==(大小t)-1){ //转换总是失败的 出去; } *撅嘴=0; printf(“inRemains:%d outRemains:%d cvtlen:%d\n”,(int)inRemains,(int)outRemains,(int)cvtlen); 对于(int i=0;(i

C++ 编码文本转换总是失败 int conv_utf8_to_ucs2(常量字符*src,大小长度) { iconv_t cb=iconv_开放(“UTF-16”、“UTF-8”); if(cb==(iconv_t)(-1)) 返回0; uint16_t*exputff=新uint16_t[len+1]; char*pout=(char*)爆发; 尺寸=长度; 尺寸=长度*尺寸(uint16); printf(“inRemains:%d剩余部分:%d\n”,(int)inRemains,(int)剩余部分); 尺寸cvtlen=iconv(cb和src,(尺寸*)和inRemains,(char**)和pout,(尺寸*)和OutLevels); 如果(cvtlen==(大小t)-1){ //转换总是失败的 出去; } *撅嘴=0; printf(“inRemains:%d outRemains:%d cvtlen:%d\n”,(int)inRemains,(int)outRemains,(int)cvtlen); 对于(int i=0;(i,c++,c,C++,C,我有一个小程序可以将一个UTF8字符串转换为UTF16,但是iconv函数总是返回-1。我调试了它的实现,但找不到任何提示。有人能提供有关libiconv用法的见解吗?你确定我会验证字符串的内容以确保它是用UTF-8编码的。为什么要在size\u t cvtlen=iconv(cb,&src,(size\u t*)和inRemains,(char**)&pout,(size\u*)&outRemains);中使用任何类型转换,除非原型丢失?甚至char f8\u str[]=“abc";为你工作

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

你确定我会验证字符串的内容以确保它是用UTF-8编码的。为什么要在
size\u t cvtlen=iconv(cb,&src,(size\u t*)和inRemains,(char**)&pout,(size\u*)&outRemains);
中使用任何类型转换,除非原型丢失?甚至
char f8\u str[]=“abc";为你工作?@chux,不,不是。Guvante我不知道如何检查它。@user0175554-调试应用程序时,通过查看它指向的内存来检查
utf8_str
中的内容。如果这不是你所期望的,那么这就是你需要解决的另一个问题(假设你说“abc”也不起作用)。
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;
}