国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux下使用libiconv庫轉碼

2024-06-28 13:24:40
字體:
來源:轉載
供稿:網友
linux下使用libiconv庫轉碼iconv命令實現linux下字符集編碼的轉換windows下的文件復制到linux下時常會亂碼,因為windows下文件編碼為GBK,linux下默認文件編碼為UTF-8,故需要libiconv庫轉碼。1.iconv命令用法如下:iconv [選項...] [文件...]輸入/輸出格式規范:-f, --from-code=名稱 原始文本編碼-t, --to-code=名稱 輸出編碼信息:-l, --list 列舉所有已知的字符集輸出控制:-c 從輸出中忽略無效的字符-o, --output=FILE 輸出文件-s, --silent 關閉警告--verbose 打印進度信息將GBK編碼的文件Hosts_GBK轉換為UTF-8編碼的HOSTS_UTF8.示例如下:iconv -f GBK -t UTF-8 Hosts_GBK > HOSTS_UTF82.iconv函數:

(1) iconv_t iconv_open(const char *tocode, const char *fromcode);此函數說明將要進行哪兩種編碼的轉換,tocode是目標編碼,fromcode是原編碼,該函數返回一個轉換句柄,供以下兩個函數使用。

詳細說明:http://linux.die.net/man/3/iconv_open

(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);此函數從inbuf中讀取字符,轉換后輸出到outbuf中,inbytesleft用以記錄還未轉換的字符數,outbytesleft用以記錄輸出緩沖的剩余空間。

詳細說明:http://pubs.opengroup.org/onlinepubs/009695399/functions/iconv.html

  大部分情形是inbuf 不為NULL,*inbuf也不為NULL。這種情況下,iconv函數將以*inbuf起始的多字節序列轉換到以*outbuf起始的多字節序列。從*inbuf開始讀取,最多*inbytesleft字節,轉換后,從*outbuf開始寫入,最多*outbytesleft字節。

  iconv函數一次轉換一個多字節字符,每次字符轉換,*inbuf增加已轉換的字節數,*inbytesleft相應地減少已轉換的字節數;對應地,*outbuf*outbytesleft作相應的修改,同時修改cd的轉換狀態,因此,相應的操作要針對其副本。

以下四種情況不能完成轉換:

1.輸入中含無效的多字節序列。此時,它將errno設置為EILSEQ并返回(size_t)(-1)。*inbuf指向無效序列的最左端。

2.輸入的字節序列已經全部被轉換過,也就是*inbytesleft減少至0。此時,iconv返回本次調用中完成轉換的數目(可逆的轉換不計入)。

3.輸入中以不完整多字節序列作結尾。此時,它將errno設置為EINVAL并返回(size_t)(-1)。*inbuf指向不完整多字節序列的最左端。

4.輸出緩存區沒有足夠空間來存儲下一個字符。此時,它將errno設置為E2BIG并返回(size_t)(-1)。

  另一種情形是inbuf 為NULL或*inbuf為NULL,但*outbuf 不為NULL,*outbuf也不為NULL。這種情況下,iconv函數試圖將cd的轉換狀態設置為初始狀態并store a corresponding shift sequence at *outbuf。從*outbuf開始,最多寫入*outbytesleft字節。如果輸出緩存區沒有足夠空間來存儲這個重置后的序列,他將errno設置為E2BIG并返回(size_t)(-1)。反之,*outbuf增加寫入的字節數和*outbytesleft減少寫入的字節數。

  第三種情形是inbuf 為NULL或*inbuf為NULL,*outbuf 為NULL或*outbuf為NULL。這種情況下,iconv函數試圖將cd的轉換狀態設置為初始狀態。

返回值:

iconv函數返回本次調用中轉換的字符數,可逆的轉換不計入。出錯時,它將修改errno并返回(size_t)(-1)。

錯誤:

E2BIG *outbuf沒有足夠的空間。

EILSEQ 輸入含無效的多字節序列。

EINVAL 輸入含不完整多字節序列。

(3) int iconv_close(iconv_t cd);此函數用于關閉轉換句柄,釋放資源。

c代碼示例
//將utf-8轉為gb2312,代碼僅供參考。iconv_t cd;char src_utf8[20]="utf8編碼";char *inbuf=src_utf8;int inen=strlen(inbuf);int outlen=255;char *outbuf=(char *)malloc(outlen);cd=iconv_open("gb2312","utf-8");iconv(cd,&inbuf,(size_t *)&inlen,&outbuf,&outlen);PRintf("%s/n",outbuf);iconv_close(cd);free(outbuf);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磐石市| 赞皇县| 宁晋县| 新余市| 白山市| 张家口市| 芜湖县| 莱西市| 盐津县| 佛冈县| 尼勒克县| 义乌市| 峨眉山市| 军事| 萝北县| 耒阳市| 濮阳市| 靖安县| 无棣县| 永安市| 五大连池市| 厦门市| 靖江市| 安图县| 绵竹市| 保亭| 五河县| 上高县| 商河县| 明溪县| 胶南市| 南城县| 汽车| 潍坊市| 司法| 红原县| 中阳县| 永顺县| 潮安县| 翁源县| 墨脱县|