字符集编码---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

相关文章
相关标签/搜索