zoukankan      html  css  js  c++  java
  • UTF8与ANSI互转

    在取回的结果中,如果有Unicode字符,用printf来打印的话,则会出现乱码。
    通过这个方法,可以判断是否为unicode字符,是的话,通过wprintf来打印。
    1、判断字符串是否为Unicode的方法
    不用判断,在xmlhttp.send中发送的代码都经过utf8编码

    2、将UTF8转化为ANSI编码的方法,
    UTF8中一个中文字有三个字节去表示,而ANSI中一个中文字是二个字节表示。

    BOOL Utf8ToAnsi(LPCSTR lpcszStr, char* lpwszStr, DWORD dwSize)
    {
        DWORD dwMinSize;
        WCHAR* strTmp ;
        dwMinSize = MultiByteToWideChar (CP_UTF8, 0, lpcszStr, -1, NULL, 0);
        strTmp = new WCHAR[dwMinSize];
        if(dwSize < dwMinSize)
        {
            return FALSE;
        }
        MultiByteToWideChar (CP_UTF8, 0, lpcszStr, -1, strTmp, dwMinSize); 

        int   targetLen=WideCharToMultiByte(CP_ACP,0,(LPWSTR)strTmp,-1,(char   *)lpwszStr,0,NULL,NULL); 
        WideCharToMultiByte(CP_ACP,0,(LPWSTR)strTmp,-1,(char   *)lpwszStr,targetLen,NULL,NULL); 
        return TRUE;
    }

    int AnsiToUtf8()//测试
    {
        char   str   [   256   ]   =   "c 的目录"   ;   //一段UTF-8编码    
        WCHAR*   strA;    
        int   i=   MultiByteToWideChar   (   CP_ACP   ,   0   ,(char*)   str   ,-1   ,NULL,0);    
        strA   =   new   WCHAR[i];    
        MultiByteToWideChar   (   CP_ACP   ,   0   ,(   char   *   )   str,   -1,   strA   ,   i);    

        i=   WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);    
        char   *strB=new   char[i];    
        WideCharToMultiByte   (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);    
        //strB即为所求    
        return   0;
    }

  • 相关阅读:
    新建一个线程作为服务端
    设置并查看pthread创建线程时传入参数中堆栈大小值
    libevent2.0.22备忘录
    Centos7如何切换启动的内核
    svn常见问题及解决方法
    nodejs monk对接mongodb密码全过程
    百万并发的长连接是否会耗尽反向代理的端口号
    Linux文件描述符限制和单机最大长连接数
    ps命令支持的最大的进程号是多少
    nginx在配置反向代理后,启动时域名不通启动报错
  • 原文地址:https://www.cnblogs.com/tibetanmastiff/p/3621607.html
Copyright © 2011-2022 走看看