iconv學習筆記

2022-03-31 13:07:12 字數 1546 閱讀 5290

iconv是乙個電腦程式以及一套應用程式程式設計介面的名稱。它的作用是在多種國際編碼格式之間進行文字內碼的轉換。

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

int iconv_close(iconv_t cd);

size_t iconv(iconv_t cd,

char **inbuf, size_t *inbytesleft,

char **outbuf, size_t *outbytesleft);

在linux平台,libiconv已經包含在c執行時庫libc.so中,因此可以直接使用上述介面。

iconv_open函式分配乙個轉換說明符(conversion descriptor),用於字符集的轉換。

tocode是要轉換到的字元編碼(character encoding),fromcode是從哪種字元編碼轉換。tocode和fromcode都是依賴於系統的,在linux平台下,可以使用iconv --list檢視支援的字元編碼。

函式返回的轉換說明符可以一直被iconv使用,直到呼叫了iconv_close被釋放為止。如果出現錯誤,會設定errno,並返回(iconv_t)-1。

轉換說明符包含了乙個轉換狀態(conversion state),當使用iconv_open建立完畢後,轉換狀態處於初始狀態。iconv函式會修改轉換狀態。

iconv_close函式釋放轉換說明符。這個轉換說明符是之前由iconv_open分配的。

如果成功,函式返回0,出現錯誤,會設定errno,並返回-1。

iconv函式將一種字元編碼的字串行(sequence of characters)轉換成另一種字元編碼的字串行。

cd引數是轉換描述符,由iconv_open函式建立,它描述了要轉換的字元編碼。

inbuf引數指向了輸入字串行的第乙個字元的位址。inbytesleft代表inbuf的位元組數。

outbuf引數指向了輸出buffer的第乙個可用位元組的位址。outbyteleft代表了輸出buffer的可用位元組數。

當inbuf和*inbuf不為null時,iconv函式把inbuf中的字串行轉換到outbuf中。其中,inbuf最多讀取*inbytesleft個位元組,outbuf最多寫*outbytesleft個位元組。

iconv函式一次轉換乙個多位元組字元,每次轉換它都會增長*inbuf和*outbuf並減少*inbytesleft和*outbytesleft。它還會更新轉換識別符號中的轉換狀態。

如果inbuf或者*inbuf是null,並且outbuf或者*outbuf是null,iconv函式把轉換描述符的轉換狀態設為初始值。

返回值:函式返回轉換的字元數量。如果出現錯誤,會設定errno,並返回(size_t)-1。

code note for iconv

manual page 3

iconv - 維基百科

iconv函式詳解

大家都知道 iconv 是編碼轉換函式,但是各個引數的具體含義可能不是那麼清楚。我簡單介紹一下 標頭檔案 include 函式宣告 size t iconv iconv t cd,char restrict inbuf,size t restrict inbytesleft,char restric...

iconv函式詳解

大家都知道 iconv 是編碼轉換函式,但是各個引數的具體含義可能不是那麼清楚。我簡單介紹一下 標頭檔案 cpp view plain copy print?include 函式宣告 cpp view plain copy print?size t iconv iconv t cd,char res...

iconv 函式轉碼

1.iconv 函式用於轉換不同的字元編碼。使用流程 iconv open iconv iconv close 2.在將 windows 1252 轉 utf 8 時,有些字元轉碼報錯 illegal byte sequence 原因是 windows 1252 中有些字元在 utf 8 中找不到對...