Windows和Linux的字元編碼轉換

2021-09-21 23:47:06 字數 2151 閱讀 1970

前談過一篇關於linux下面unicode使用的文章。那個主要是針對多位元組和寬字元的轉換而談的。今天說的有些類似,主要是windows下面關於字元編碼轉換和linux下面的不同。

我移植的那部分程式中,有函式是用來實現utf-8和gbk之間的轉換的。其實其他很多不同型別的字元之間轉換都可以用這種方法。

先說windows。

因為windows

下面沒有函式可以實現這一功能,所以得自己寫。思路很簡單,就是利用之前講過的那兩個函式來實現,即:

multibytetowidechar

和widechartomultibyte

來實現。先將其中一種編碼(如

utf-8

)利用multibytetowidechar

轉換為寬位元組,然後再利用

widechartomultibyte

轉換為另一種編碼(如

gbk)。反過來也是一樣的。

下面給出**:

long utf8togbk(const void * lputf8str, string & str) 

//獲取轉換到gbk編碼後所需要的字元空間長度 

nretlen = ::widechartomultibyte(cp_acp, 0, lpunicodestr,

-1, null, null, null, null);         

char *lpgbkstr = new char[nretlen + 1]; 

nretlen = ::widechartomultibyte(cp_acp, 0, lpunicodestr,

-1, (char *)lpgbkstr, nretlen, null, null);       

//轉換到gbk編碼 

if(!nretlen) 

str = lpgbkstr; 

delete lpunicodestr; 

delete lpgbkstr; 

return 0; 

}

再來看linux

,它已經提供了函式可以實現這一功能,不僅如此,

linux

還可以實現批量檔案的字元編碼轉換呢。只不過在

linux

下面支援的字符集多少會和

windows

的不同,所以一定得先查字符集有哪些,再去使用函式。這裡推薦使用

locale –m

命令,得到的字符集比較全。

實現這一功能的正是

iconv

函式族,包含以下三個函式:

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

此函式說明將要進行哪兩種編碼的轉換,

tocode

是目標編碼,

fromcode

是原編碼,該函式返回乙個轉換控制代碼,供以下兩個函式使用。

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

此函式從

inbuf

中讀取字元,轉換後輸出到

outbuf

中,inbytesleft

用以記錄還未轉換的字元數,

outbytesleft

用以記錄輸出緩衝的剩餘空間。

int iconv_close(iconv_t cd);

此函式用於關閉轉換控制代碼,釋放資源。

下面給demo

**:

#include

#include

#include

#define buflen 256 

char outbuf[buflen]; 

char inbuf[buflen] = "characters convertion"; 

int main() 

retsize = iconv(cd, &pin, (size_t *)&inlen, &pout, (size_t *)&outlen); 

if((size_t)-1 == retsize)  

if(outlen > 0)  

iconv_close(cd); 

return 0; 

}

linux和windows的區別

linux和windows的區別 linux windows linux介面 windows 介面 圖形介面風格根據發布版不同而不同,可能互不相容。gun linux的終端機是從unix傳承下來的,基本命令和操作方法也幾乎一樣 介面統一外殼程式固定程式選單幾乎一致,快捷鍵也幾乎相同 linux操作 ...

linux和windows的區別

1.什麼是linux?linux是一套免費使用和自由傳播的類unix作業系統,是乙個多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。2...

linux和windows的區別

目前國內linux更多的是應用於伺服器上,而桌面作業系統更多使用的是 windows。主要區別如下 比較windows linux 介面介面統一,外殼程式固定所有windows程式選單幾乎一致,快捷鍵也幾乎相同 圖形介面風格依發布版不同而不同,可能互不相容。gnu linux的終端機是從unix傳承...