linux下UTF-8轉(zhuǎn)GBK編碼后,落文件,文件內(nèi)容丟失,只有幾個字符

解決辦法:


tmpbuf=tmpbuff; 轉(zhuǎn)碼前,標記轉(zhuǎn)碼內(nèi)容首地址


linux下c語言利用iconv函數(shù)實現(xiàn)utf-8轉(zhuǎn)unicode,iconv是linux下的編碼轉(zhuǎn)換的工具,它提供命令行的使用和函數(shù)接口支持。

iconv函數(shù)族的頭文件是iconv.h,使用前需包含

#include <iconv.h>

iconv函數(shù)族有三個函數(shù),原型如下:

函數(shù)1:

iconv_t iconv_open(const char *tocode, const char *fromcode);

此函數(shù)說明將要進行哪兩種編碼的轉(zhuǎn)換,tocode是目標編碼,fromcode是原編碼,該函數(shù)返回一個轉(zhuǎn)換句柄,供以下兩個函數(shù)使用。

函數(shù)2:

size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);

此函數(shù)從inbuf中讀取字符,轉(zhuǎn)換后輸出到outbuf中,inbytesleft用以記錄還未轉(zhuǎn)換的字符數(shù),outbytesleft用以記錄輸出緩沖的剩余空間。

注意:inbuf和outbuf都必須是有存儲空間的不能定義為常量,如:char *inbuf = "abc" 或者是char *outbuf = "123"這樣定義都是錯誤的??梢詍alloc申請空間,或者char outbuff[64]=“”。(另外inbuf,inbytesleft,outbuf,outbytesleft這幾個參數(shù)在使用過程中都會改變,最好是先保存一下原值,然后再使用。)

要想知道轉(zhuǎn)換編碼后的string的首地址,需要先保存編碼轉(zhuǎn)換前string的首地址,tmpbuf=tmpbuff; 使用過程tmpbuff首地址會丟失;

需要知道轉(zhuǎn)換后的編碼長度值outbytesleft,outbytesleft=maxlen-outbytesleft;這里maxlen=2*strlen(inbuf);inbuf轉(zhuǎn)碼前。

函數(shù)3:

int iconv_close(iconv_t cd);

此函數(shù)用于關(guān)閉轉(zhuǎn)換句柄,釋放資源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別? C沒有Protection行為...
    阿面a閱讀 7,894評論 0 10
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • 說一句謊吧 嗯 我不愛你了 可能自己都忘記了自己也是個女人了吧 每天活的像個超人一樣 好像自己可以拯救世界一樣 ...
    馥禹閱讀 344評論 2 0
  • 元旦,又是一個新的開始。 早上起床,僅管天還沒亮,卻已經(jīng)感覺心頭有陽光跳躍。 年底是用來總結(jié)過去的,那么年初就是用...
    青茶竹酒閱讀 147評論 0 0
  • 我們在很多地方會遭遇到語言攻擊,我們也可能用語言傷害別人,這種攻擊形成的傷痕不會留在身體上,卻會留在心靈上,甚至久...
    berrypeng閱讀 926評論 0 0

友情鏈接更多精彩內(nèi)容