iconv用法,編碼轉換(一)

2021-05-27 16:25:43 字數 1407 閱讀 1974

2010-11-24 17:18:58

| 分類:

linux

| 標籤:|字型大小

大中小訂閱

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

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

int iconv_close(iconv_t cd);

iconv_open函式用來開啟乙個編碼轉換的流,iconv函式的作用是實際進行轉換,iconv_close函式的作用就是關閉這個流。實際用法參見下面的例子,下面是乙個將utf-8碼轉換成gbk碼的例子,我們假設已經有了乙個uft8編碼的輸入緩衝區inbuf以及這個緩衝區的長度inlen。

iconv_t cd = iconv_open( "gbk", "utf-8");

char *outbuf = (char *)malloc(inlen * 4 );

bzero( outbiuf, inlen * 4);

char *in = inbuf;

char *out = outbuf;

size_t outlen = inlen *4;

iconv(cd, &in, (size_t *)&inlen, &out,&outlen);

outlen = strlen(outbuf);

printf("%s\n",outbuf);

free(outbuf);

iconv_close(cd);

非常值得注意的地方是:

iconv函式會修改引數in和引數out指標所指向的地方,也就是說,在呼叫iconv函式之前,我們的in和inbuf指標以及out和outbuf指標指向的是同一塊記憶體區域,但是呼叫之後out指標所指向的地方就不是outbuf了,同理in指標。所以要

char *in = inbuf;

char *out = outbuf;

另存一下,使用或者釋放記憶體的時候也要使用原先的那個指標outbuf和inbuf。

附demo:

#include#include#includeusing namespace std;

int main()

else

ifstream fp("1.html"); 為utf8格式檔案

char * inbuf = new char[1000] ;

string s;

while(getline(fp,s))

iconv_close(cd);

return 0;

}

iconv 檔案編碼轉換

linux shell 配置檔案中預設的字符集編碼為utf 8 utf 8是unicode的一種表達方式,gb2312是和unicode都是字元的編碼方式,所以說gb2312跟utf 8的概念應該不是乙個層次上的。在linux上進行編碼轉換時,可以利用iconv命令實現,這是針對檔案的,即將指定檔案...

iconv 檔案編碼轉換

linux shell 配置檔案中預設的字符集編碼為utf 8 utf 8是unicode的一種表達方式,gb2312是和unicode都是字元的編碼方式,所以說gb2312跟utf 8的概念應該不是乙個層次上的。在linux上進行編碼轉換時,可以利用iconv命令實現,這是針對檔案的,即將指定檔案...

linux 編碼型別轉換 iconv

用途說明 iconv命令是用來轉換檔案的編碼方式的 convert encoding of given files from one encoding to another 比如它可以將utf8編碼的轉換成gb18030的編碼,反過來也行。jdk中也提供了類似的工具native2ascii。linu...