字符集編碼---2 編碼轉換

    本篇將劃分爲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 Code Page

Windows API: MultiByteToWideChar

Windows API: WideCharToMultiByte

Linux API: iconv_open

Linux API: iconv

Linux API: iconv_close

相關文章
相關標籤/搜索