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

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

Chinaunix

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

再請(qǐng)教一個(gè)問題,關(guān)于iconv的,返回失敗,但轉(zhuǎn)換成功了,不知道原因。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-11-29 14:22 |只看該作者 |倒序?yàn)g覽
下面是代碼,轉(zhuǎn)化成功了,但iconv返回-1,errno為84,errno.84 is: Invalid or incomplete multibyte or wide character
不知道原因,請(qǐng)高手指點(diǎn)。
  1. #include <iconv.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <errno.h>
  6. #define OUTLEN 255
  7. //代碼轉(zhuǎn)換:從一種編碼轉(zhuǎn)為另一種編碼
  8. int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
  9. {
  10. iconv_t cd;
  11. int rc;
  12. char **pin = &inbuf;
  13. char **pout = &outbuf;

  14. cd = iconv_open(to_charset,from_charset);
  15. if (cd==0) return -1;
  16. memset(outbuf,0,outlen);
  17. if (iconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen)==-1) return -1;
  18. iconv_close(cd);
  19. return 0;
  20. }
  21. //UNICODE碼轉(zhuǎn)為GB2312碼
  22. int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
  23. {
  24. return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
  25. }
  26. //GB2312碼轉(zhuǎn)為UNICODE碼
  27. int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
  28. {
  29. return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
  30. }

  31. main()
  32. {
  33. char *in_utf8 = "姝e?ㄥ??瑁?";
  34. char *in_gb2312 = "正在安裝";
  35. char out[OUTLEN];

  36. //unicode碼轉(zhuǎn)為gb2312碼
  37. int rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
  38. printf("rc:%d, errno:%d, unicode-->gb2312 out=%sn",rc,errno, out);
  39. //gb2312碼轉(zhuǎn)為unicode碼
  40. rc = g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN);
  41. printf("rc:%d, errno:%d, gb2312-->unicode out=%sn",rc,errno,out);
  42. }
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-11-29 15:11 |只看該作者
本帖最后由 lj56630325 于 2010-11-29 15:13 編輯

export info in bash:

  1. declare -x LANG="zh_CN.utf8"
  2. declare -x LC_ALL=""
  3. declare -x LC_CTYPE="zh_CN.utf8"
復(fù)制代碼
我的main, 其他一樣.

  1. main()
  2. {
  3.     char *in_utf8 = "正在安裝"; //
  4.     char out[OUTLEN];
  5.     char out_gb2312[OUTLEN];

  6.     //unicode碼轉(zhuǎn)為gb2312碼
  7.     int rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
  8.     printf("rc:%d, errno:%d, unicode-->gb2312 out=%s\n",rc,errno, out);                                               
  9.     //gb2312碼轉(zhuǎn)為unicode碼
  10.     rc = g2u(out,strlen(out),out_gb2312,OUTLEN);
  11.     printf("rc:%d, errno:%d, gb2312-->unicode out=%s\n",rc,errno,out_gb2312);                                         
  12. }

復(fù)制代碼

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-11-29 15:13 |只看該作者
輸出

  1. rc:0, errno:0, unicode-->gb2312 out=
  2. rc:0, errno:0, gb2312-->unicode out=正在安裝
復(fù)制代碼
可能你的"正在安裝"不是gb2312

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-11-29 16:11 |只看該作者
輸出可能你的"正在安裝"不是gb2312
lj56630325 發(fā)表于 2010-11-29 15:13



    非常感謝您的回答,我按照您的代碼試了一下還是不行:
rc:-1, errno:84, unicode-->gb2312 out=���ڰ�װ
rc:-1, errno:84, gb2312-->unicode out=正在安裝
通過gdb,發(fā)現(xiàn)第一行輸出地確實(shí)是gbk編碼,我的終端是utf8編碼的,所以第二行可以看到。
而且文件格式我是通過iconv改變成utf8的,
[user@localhost1 test]$ file 4.c
4.c: UTF-8 Unicode C program text

也是utf8,輸出還是有問題,請(qǐng)?jiān)俅沃附獭。。?/td>

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-11-29 16:32 |只看該作者
輸出可能你的"正在安裝"不是gb2312
lj56630325 發(fā)表于 2010-11-29 15:13



    您好,您運(yùn)行的代碼就是我放在上面的代碼嗎?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-11-29 16:46 |只看該作者
關(guān)鍵是雖然返回成功,但是卻轉(zhuǎn)換成功了。。。,很是納悶。。。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-11-29 17:29 |只看該作者
回復(fù) 5# rain_fish
1) 我用的代碼是2樓貼的代碼.

2) 我確定的是我程序中的"正在安裝"是UTF8的. (我的BASH是UTF8的, 我手動(dòng)輸入的"正在安裝")

3) 你應(yīng)該檢測(cè)你程序的字符是什么編碼的. 這個(gè)跟文件(4.c: UTF-8 Unicode C program text)是UTF8有沒有關(guān)系, 我不清楚.

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
8 [報(bào)告]
發(fā)表于 2010-11-30 12:29 |只看該作者
關(guān)鍵是雖然返回成功,但是卻轉(zhuǎn)換成功了。。。,很是納悶。。。
rain_fish 發(fā)表于 2010-11-29 16:46



很可能是你的多字節(jié)字符串最后一個(gè)字符是不完整的,所謂轉(zhuǎn)換成功, 大概是之前的轉(zhuǎn)換成功了, 而后面跟著錯(cuò)誤不可見的半個(gè)字符

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2010-11-30 13:44 |只看該作者
很可能是你的多字節(jié)字符串最后一個(gè)字符是不完整的,所謂轉(zhuǎn)換成功, 大概是之前的轉(zhuǎn)換成功了, 而后面 ...
zylthinking 發(fā)表于 2010-11-30 12:29



    我確定后沒有不完整的字符,很是納悶,剛才在虛擬機(jī)上測(cè)試了一下,竟然成功。不知道是什么原因了

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
10 [報(bào)告]
發(fā)表于 2010-11-30 15:44 |只看該作者
我確定后沒有不完整的字符,很是納悶,剛才在虛擬機(jī)上測(cè)試了一下,竟然成功。不知道是什么原因了
rain_fish 發(fā)表于 2010-11-30 13:44



淡定, 淡定。。。。。。。。{:3_189:}
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP