本篇將劃分爲Windows平臺、Linux平臺兩個部分,分別介紹兩個平臺下經常使用的字符編碼轉換接口及思路。html
Windows平臺:linux
WIndows平臺提供了一對 其餘編碼 與 UTF-16間相互轉換的API,所以Windows平臺下的編解碼轉換均可以經過UTF-16編碼做爲橋樑。windows
頭文件:stringapiset.h (include Windows.h)api
庫文件:Kernel32.libide
轉爲UTF-16編碼: int MultiByteToWideChar(函數
UINT CodePage,編碼
DWORD dwFlags,spa
_In_NLS_string_(cbMultiByte)LPCCH lpMultiByteStr,code
int cbMultiByte,htm
LPWSTR lpWideCharStr,
int cchWideChar );
UTF-16編碼轉出:int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
_In_NLS_string_(cchWideChar)LPCWCH lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCCH lpDefaultChar,
LPBOOL lpUsedDefaultChar );
這兩個函數中,須要說明的就是第 1 個參數:CodePage。Windows系統是能夠同時支持多種字符集的,微軟爲不一樣的字符集都指定了一個惟一標識,並定義爲CodePage。每一個CodePage都一個宏定義與其相對。經常使用CodePage宏定義有如下3個:
CP_ACP:本地字符編碼,就是取當前系統默認的字符集,這個跟系統設置(當前系統默認的語言及所處時區)有關係。
因此不一樣機器,甚至同一機器上,這個宏對應的實際字符集都是不固定的。
CP_UTF8:UTF-8編碼。
CP_936:GBK編碼。
Linux平臺
Linux平臺下,GCC 爲咱們提供了一組名爲 iconv的函數,可用於實現編碼轉換。
頭文件:iconv.h
初始化,指定轉入、轉出編碼格式:
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 --list 命令來獲取。
相關連接:
Windows API: MultiByteToWideChar