歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

libiconv字符集轉換庫使用方法

在軟件開發中不可避免的需要用到字符集的轉換;轉換方法很多如自行編寫字符集轉換庫、利用 Windows提供之 MultiByteToWideChar函數等;自行編寫相對周期較長,而利用 MultiByteToWideChar等函數進行轉換在跨平台移值時帶來很大的不方便;所以在本文裡我們將講述如何利用在 Linux與 Windows下都可用的 libiconv庫進行字符集的轉換。

我們可以從 http://www.gnu.org/software/libiconv/上下載最新版本的 libiconv;本文裡以 libiconv-1.9.2-1.exe為例子說明安裝與使用方法; libiconv的安裝非常的方便,就和大多數的 Windows應用程序安裝一樣直接 Step by Step就可以了;在安裝過程中會提示你是否下載源代碼,源代碼說白了對我們也沒有多大的用處所以就不選擇下載源代碼;安裝完之後在 libiconv的安裝目錄下的 man/pdf目錄中有一個 libiconv-man.pdf,這個文件就是 libiconv相關函數的說明;所以如果你對 libiconv還不是很熟悉的話請看一下這個文件。

為了在 VC6中使用 libiconv庫我們必需對 VC6進行相應的設置;從 VC6的菜單欄中選擇 Toolsà Options..,在彈出的對話框中選擇 Directories選項卡,在 Show directories for下拉框中選擇 Include files,在最下方的 Directories:中添加上 libiconv安裝目錄下的 include目錄。

這樣我們就配置了 iconv.h文件查找目錄;由於 libiconv要用到 libiconv.lib所以接下來我們應該配置一下 libiconv.lib文件的查找目錄;在圖 1-1的 Show directories for下接框中選擇 Library files,在最下方的 Directories:列表中添加上 libiconv安裝目錄下的 lib目錄; OK配置完成點擊 OK按鈕就可以了;為了測試方便我們應該所 libiconv安裝目錄下之 bin目錄下的 libiconv2.dll復制到系統的 System32目錄下。

轉換例子如下:

#include <stdio.h>
#include <string.h>
//包函 libiconv庫頭文件
#include <iconv.h>
//導入 libiconv庫
#pragma comment(lib,"libiconv.lib")
 
int ChangeCode( const char* pFromCode,
                              const char* pToCode,
                              const char* pInBuf,
                              size_t* iInLen,
                              char* pOutBuf,
                              size_t* iOutLen );
 
int main( int argc, char* argv[] )
{
      char sInBuf[100];
      char sOutBuf[100];
      size_t iInLen = 0;
      size_t iOutLen = 100;
      int iRet;
      strcpy( sInBuf, "測試 Test Source" );
      memset( sOutBuf, 0x00, 100 );
      iInLen = strlen( sInBuf );
      iRet = ChangeCode( "GBK", "UTF-16", sInBuf, &iInLen, sOutBuf, &iOutLen );
      return 0;
}
 
int ChangeCode( const char* pFromCode,
                              const char* pToCode,
                              const char* pInBuf,
                              size_t* iInLen,
                              char* pOutBuf,
                              size_t* iOutLen )
{
      int iRet;
      //打開字符集轉換
      iconv_t hIconv = iconv_open( pToCode, pFromCode );
      if ( -1 == (int)hIconv )
      {
              return -1;//打開失敗,可能不支持的字符集
      }
      //開始轉換
      iRet = iconv( hIconv, (const char**)(&pInBuf), iInLen, (char**)(&pOutBuf), iOutLen );
      //關閉字符集轉換
      iconv_close( hIconv );
      return iRet;
}

字符集的轉換就是這麼的簡單;當然如果你有興趣的話在 Linux下也去安裝一下 libiconv然後把上面那段代碼放到 Linux下用 gcc編譯一下看看。

Copyright © Linux教程網 All Rights Reserved