亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7261 | 回復(fù): 10
打印 上一主題 下一主題

使用iconv函數(shù)修改字符集出錯(cuò),大家?guī)涂纯?/a> [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-12-22 16:44 |只看該作者 |倒序?yàn)g覽
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
        iconv_t cd;
        int rc;
        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,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1)
                                return -1;
        iconv_close(cd);
        return 0;

}



int main()
{
        char out[400];
        char str_str[400];
        unsigned short test[400];
        wchar_t wcode[400];
        
        unsigned int inlen;
        unsigned int outlen=200;

        int result;
        string str = "漢";

        memset(str_str,0,sizeof(str_str));
        memcpy(str_str,str.c_str(),strlen(str.c_str()));
        inlen=strlen(str_str);
  
        result=code_convert("usc2","gb18030",str_str,inlen,out,OUTLEN);

  printf("result = %d\n",result);
  
}



我照著網(wǎng)上的范例寫了這個(gè)程序,想把GB18030的中文字符集轉(zhuǎn)換成USC2的字符集,但是一直都不成功,每次執(zhí)行的result結(jié)果都是-1,大家?guī)兔纯词鞘裁丛?/font>

[ 本帖最后由 封神 于 2008-12-23 17:25 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-12-22 17:04 |只看該作者
iconv_open出錯(cuò)返回(iconv_t)(-1)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-12-22 17:12 |只看該作者
我是這里出錯(cuò)返回:

if (iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1)
        return -1;

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-12-22 17:15 |只看該作者
"result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);"

“妹子執(zhí)行的result結(jié)果都是-1”

看看你給inlen 傳的值大妹子
你是每次還是妹子

ps:strlen(str.c_str())這個(gè)地方的用法也有問題的吧

[ 本帖最后由 zhoubug 于 2008-12-22 17:18 編輯 ]

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-12-22 17:30 |只看該作者
ps:strlen(str.c_str())這個(gè)地方的用法也有問題的吧


我一直都這么用啊,得到的長度也沒錯(cuò)。雖然是在"result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);"調(diào)用的字符集轉(zhuǎn)換函數(shù),但是執(zhí)行到if (iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1) 這里時(shí)才會返回 -1

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-12-22 17:38 |只看該作者
你的inlen沒有初始化值,0或者你需要轉(zhuǎn)換的buf長度

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-12-22 17:41 |只看該作者
原帖由 封神 于 2008-12-22 17:30 發(fā)表
ps:strlen(str.c_str())這個(gè)地方的用法也有問題的吧


我一直都這么用啊,得到的長度也沒錯(cuò)。雖然是在"result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);"調(diào)用的字符集轉(zhuǎn)換函數(shù),但是執(zhí)行到 ...

那是你走點(diǎn)小運(yùn)而已

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-12-23 14:22 |只看該作者
原帖由 zhoubug 于 2008-12-22 17:38 發(fā)表
你的inlen沒有初始化值,0或者你需要轉(zhuǎn)換的buf長度



源程序有加的,拷貝過來的時(shí)候漏掉了。

問題已經(jīng)解決了一半,原來iconv轉(zhuǎn)碼的時(shí)候是區(qū)分大小寫的.......我把編碼格式改成"ucs2"和"gb18030"就通過了,不過在別的程序里面調(diào)用這個(gè)函數(shù)的時(shí)候,會報(bào)bus error,用gdb跟了一下,發(fā)現(xiàn)報(bào)下面的錯(cuò)誤:

Program received signal SIGBUS, Bus error
  si_code: 1 - BUS_ADRALN - Invalid address alignment. Please refer to the following link that helps in handling unaligned data: http://docs.hp.com/en/7730/newhe ... tm#pragma-pack-ex3.
[Switching to thread 2 (system thread 1754571)]
0x9fffffff7bbf7900:0 in <unknown_procedure> + 0xf90 ()
   from /usr/lib/nls/iconv/hpux64/methods.1/lucs2gb18030.so

這個(gè)問題怎么解決?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-12-23 15:18 |只看該作者
汗, 你代碼中不是將UTF8轉(zhuǎn)換為GB18030么?

ucs2和UTF8根本就不是一個(gè)概念, 別亂用.

你的源代碼是什么編碼, "漢"就是什么編碼.

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-12-23 17:24 |只看該作者
最終要求是gb18030轉(zhuǎn)成UCS2,‘漢’字是從數(shù)據(jù)庫取出來的16GBK編碼,不過我在iconv支持的編碼庫中沒看到16GBK,就用了16GBK之前的gb18030
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP