zoukankan      html  css  js  c++  java
  • 字符集编码---2 编码转换

        本篇将划分为Windows平台、Linux平台两个部分,分别介绍两个平台下常用的字符编码转换接口及思路。

        Windows平台:

        WIndows平台提供了一对 其他编码 与 UTF-16间相互转换的API,因此Windows平台下的编解码转换都可以通过UTF-16编码作为桥梁。

        头文件:stringapiset.h (include Windows.h)

        库文件:Kernel32.lib

        转为UTF-16编码: int MultiByteToWideChar(

                UINT                 CodePage,

                DWORD                 dwFlags,

                _In_NLS_string_(cbMultiByte)LPCCH  lpMultiByteStr,

                int                   cbMultiByte,

                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

       

  • 相关阅读:
    ural1018(树形dp)
    hdu1011(树形dp)
    poj1463(树形dp)
    poj1655(树形dp)
    poj1155(树形dp)
    hdu2196(树形dp)
    hdu1520(树形dp)
    hdu2126(求方案数的01背包)
    运用bootstrap框架的时候 引入文件的问题
    动态的改变标签内的src属性
  • 原文地址:https://www.cnblogs.com/o--ok/p/9399059.html
Copyright © 2011-2022 走看看