學習使用libiconv庫

2021-09-30 09:59:38 字數 2443 閱讀 9910

libiconv庫是乙個基於gnu協議的開源庫,主要是解決多語言編碼處理轉換等應用問題。

怎樣學習使用libiconv庫?對於剛接觸到人來說,這篇文章不妨去看一看,若已經用到過該庫的人,在應用的過程中可能遇到一些問題,我們可以一起來**,我的****是

[email protected] 。

幾個函式原型:

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是開啟乙個編碼流,類似於開啟乙個編碼管道(通道),出錯則返回 -1;

iconv用於具體輸入的轉換,如果出錯,則返回 -1,否則返回 0;

iconv_close是關閉該管道(通道)。

舉個例子:

#include

#include

#include

#include

#define outlen 255

int covert(char *, char *, char *, size_t , char *, size_t );

int main(int argc, char *ar**)

int covert(char *desc, char *src, char *input, size_t ilen, char *output, size_t olen)

memset(output, 0, olen);

if (iconv(cd, pin, &ilen, pout, &olen)) return -1;

iconv_close(cd);

return 0;

}

這裡面covert函式就是用於將編碼進行轉換,其中要注意的地方是iconv函式的傳遞引數:

1,iconv傳遞有5個引數;

2,第3個引數和第5個引數一般是input和output實際分配的大小,一般是 sizeof(type)*strlen(string);

3,第4個引數是不能直接傳遞指標的位址,因為iconv函式能夠改變指標的值,所以需要複製乙份指標變數;

如果對於大量需要轉換的編碼,上述函式covert不適合該方式,一是記憶體的限制不能一次呼叫,二是若分多次呼叫會頻繁開啟乙個編碼管道(通道),導致資源浪費,最好的辦法還是拆開該函式根據情況使用。

這裡補充一下**:

translatesp.h:

#ifndef __translatesp_h_

#define __translatesp_h_

#include

class translatesp

translatesp(const char *from_charset,const char *to_charset)

~translatesp()

public:

size_t translate(char *src, size_t srclen, char *desc, size_t desclen);

size_t convert(const char *from_charset, const char *to_charset, 

char *src, size_t srclen, char *desc, size_t desclen);

private:

iconv_t i_cd;

};#endif

translatesp.cpp:

#include "translatesp.h"

#define max_len 200

size_t translatesp::translate(char *src, size_t srclen, char *desc, size_t desclen)

size_t translatesp::convert(const char *from_charset, const char *to_charset, 

char *src, size_t srclen, char *desc, size_t desclen)

int main(int argc, char *ar**)

編譯:

g++ translatesp.cpp -o test

./test

我愛zhong國! %#@#

i大量需要轉換的編碼

函式就是用於將hello進行轉換

(以上輸出是gbk編碼)

怎樣學習使用libiconv庫

libiconv庫是乙個基於gnu協議的開源庫,主要是解決多語言編碼處理轉換等應用問題。怎樣學習使用libiconv庫?對於剛接觸到人來說,這篇文章不妨去看一看,若已經用到過該庫的人,在應用的過程中可能遇到一些問題,我們可以一起來 我的 是 cnangel gmail.com 也可與本部落格主人聯絡...

libiconv使用小例子

最近用到一點轉碼的東西,在網上搜到乙個libiconv,使用了一下感覺還可以,不過還是有一兩處容易犯錯的地方,除錯了半天才搞明白,此處是乙個將utf 8轉換為gbk的小例子 std string convfromutf8 std string s size t inlen s.size const ...

交叉編譯使用libiconv

一 環境 虛擬機器 ubuntu 16.04 交叉編譯工具 二 編譯安裝 1 configure prefix usr local libiconv amba install host armv7l timesys linux gnueabi cc home iflytek dyye toolcha...