iconv_open提示无效的参数是怎么回事

#include <iconv.h>
#include <stdio.h>
#include <locale.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>

int main(int argc, char * argv[])
{
    size_t ret;
    char in_utf8[] = "姝e?ㄥ??瑁?";
    char in_gb2312[] = "正在安装";

    int src_len = strlen(in_utf8);
    char szDest[64] = {'\0'};
    int dest_len = 64;
    memset(szDest,'\0',64);
  
    iconv_t conv;
  
    conv = iconv_open("UFT-8","GB2312");
    if (conv == (iconv_t)-1)
    {
        perror("iconv_open:");
        return -1;
    }
   
    ret = iconv(conv,(char**)&in_utf8,&src_len,&szDest,&dest_len);
    if (ret == -1)
    {
        perror("iconv:");
        return -1;
    }

    printf("%s\r\n",szDest);
    iconv_close(conv);
   
    return 0;
}
iconv_open 提示无效的参数是怎么回事? 我想把UTF8转成 GB2312
就是把LINUX下的默认编码转成WINDOWS可以显示的

conv = iconv_open("UFT-8","GB2312");
写反了吧
conv = iconv_open("GB2312","UFT-8");
iconv_t iconv_open (const char* tocode, const char* fromcode);

看看你的系统是否支持GB2312, 有的系统需要用GB18030

C/C++ code
#include <stdio.h>
#include <iconv.h>

int main(int argc, char *argv[])
{
        char utf8[] = "\xe6\xad\xa3\xe5\x9c\xa8\xe5\xae\x89\xe8\xa3\x85";
        char gb2312[100];

        char *inbuf;
        size_t inleft;
        char *outbuf;
        size_t outleft;

        size_t inlen;
        size_t outlen;

        iconv_t cd;

        cd = iconv_open("GB18030", "utf-8");
        if ((iconv_t)-1 == cd) {
                perror("icnov_open");
                exit(1);
        }

        inbuf = utf8;
        inleft = strlen(utf8) + 1;
        outbuf = gb2312;
        outleft = sizeof(gb2312);

        iconv(cd, &inbuf, &inleft, &outbuf, &outleft);
        outlen = sizeof(gb2312) - outleft;

        printf("%s\n", gb2312);

        return 0;
}

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有