免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3018 | 回复: 2
打印 上一主题 下一主题

关于utf8转码问题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-18 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-22 09:30 |只看该作者 |倒序浏览
我的前台传上来xml是gb2312,我用的是libxml,因为中文的原因,我后台把他转换成了utf8,然后中文就看不到了,我插入数据库informix也是乱码,所以我从doc里取字符串之后,还是把它转换成了gb2312.
这时就有问题了,有些字符串没有中文的时候就乱掉了,比如 Flag这个上传的变量,实际就是一个'0',但经过转换之后 ‘0‘后面多了几个乱字符。
我的操作系统是sco openserver

int code_convert(char* from_charset, char* to_charset, char* inbuf,

               int inlen, char* outbuf, int outlen)

{

    iconv_t cd;

    char** pin = &inbuf;   

    char** pout = &outbuf;

    cd = iconv_open(to_charset,from_charset);   

    if(cd == 0)

       return -1;

    memset(outbuf,0,outlen);   

    if(iconv(cd,(const char**)pin,(unsigned int *)&inlen,pout,(unsigned int*)&outlen)== -1)
       return -1;   

    iconv_close(cd);

    return 0;   

}

int u2g(char *inbuf,char *outbuf)   
{
    int nOutLen = 2 * strlen(inbuf) - 1;

    char* szOut = (char*)malloc(nOutLen);

    if (-1 == code_convert("utf-8","gb2312",inbuf,strlen(inbuf),szOut,nOutLen))
    {
       free(szOut);
       return -1;
    }
    strcpy(outbuf,szOut);
        free(szOut);
    return 0;

}   

//GB2312码转为UNICODE码

int g2u(char *inbuf,char *outbuf)   

{
    int nOutLen = 2 * strlen(inbuf) - 1;
    char* szOut = (char*)malloc(nOutLen);
    if (-1 == code_convert1("gb2312","utf-8",inbuf,strlen(inbuf),szOut,nOutLen))
    {
       free(szOut);
       szOut = NULL;
       return -1;
    }
    strcpy(outbuf,szOut);
    free(szOut);
    return 0;

}

[ 本帖最后由 lyl2002 于 2009-7-22 09:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-24 07:11 |只看该作者
if (-1 == ...

看到这种写法,我就觉得恶心……

论坛徽章:
0
3 [报告]
发表于 2009-07-24 07:12 |只看该作者
这时就有问题了,有些字符串没有中文的时候就乱掉了,比如 Flag这个上传的变量,实际就是一个'0',但经过转换之后 ‘0‘后面多了几个乱字符。


解释一下?Ctrl-F 发现通篇只有一个 Flag。



[ 本帖最后由 langue 于 2009-7-24 07:15 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP