猫咪一词。WCHAR szTemp[] = L"猫咪"; 
二进制代码是:2B 73 AA 54但是 IIS 输出的网页里“猫咪”一词的二进制代码是:
E7 8C AB E5 92 AA请教是为什么啊?
如何得到 E7 8C AB E5 92 AA ?谢谢!!!

解决方案 »

  1.   

    IIS  默认的是 gb2312 编码
      

  2.   

    将asp文件中<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />这样的句子,
    改为:<meta http-equiv="Content-Type" content="text/html; charset=GB2312" /> 试试行不行
      

  3.   

    谢谢楼上的回答,我是想知道如何用 C++ 代码来获得这样的编码,如何将“猫咪”两个字转换成二进制码为 E7 8C AB E5 92 AA Unicode(UTF-8) 的字符。
    谢谢!
      

  4.   

    //2B 73 AA 54 - utf16 little endian
    猫咪 //E7 8C AB E5 92 AA - utf8
    猫咪
    这是utf16格式的,utf16与utf8本质是一样的,只是utf16使用固定两个字节表示一个字符,而utf8则使用1-3个字节表示一个字符。utf16可按公式自己转为utf8,也可以使用WideCharToMultiByte函数转。
      

  5.   

    #pragma once
    #include "stdafx.h"
    #include "string"
    using namespace std;
    class CChineseCode
    {
       public:
           static void UTF_8ToUnicode(wchar_t* pOut,char *pText);  // 把UTF-8转换成Unicode
           static void UnicodeToUTF_8(char* pOut,wchar_t* pText);  //Unicode 转换成UTF-8
           static void UnicodeToGB2312(char* pOut,wchar_t uData);  // 把Unicode 转换成 GB2312 
           static void Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer);// GB2312 转换成 Unicode
           static void GB2312ToUTF_8(string& pOut,char *pText, int pLen);//GB2312 转为 UTF-8
           static void UTF_8ToGB2312(char* pOut, char *pText, int pLen);//UTF-8 转为 GB2312
    }; ------------------------------------------------------------------------------------
    #include ".\chinesecode.h"void CChineseCode::UTF_8ToUnicode(wchar_t* pOut,char *pText)
    {
    char* uchar = (char *)pOut; uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);
    uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);
    return; 
    }void CChineseCode::UnicodeToUTF_8(char* pOut,wchar_t* pText)
    {
    // 注意 WCHAR高低字的顺序,低字节在前,高字节在后
    char* pchar = (char *)pText; pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
    pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6);
    pOut[2] = (0x80 | (pchar[0] & 0x3F)); return;
    }void CChineseCode::UnicodeToGB2312(char* pOut,wchar_t uData)
    {
    WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(wchar_t),NULL,NULL);
    return;
    }     void CChineseCode::Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer)
    {
    ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1);
    return ;
    }void CChineseCode::GB2312ToUTF_8(string& pOut,char *pText, int pLen)
    {
    char buf[4];
    int nLength = pLen* 3;
    char* rst = new char[nLength]; memset(buf,0,4);
    memset(rst,0,nLength); int i = 0;
    int j = 0;      
    while(i < pLen)
    {
    //如果是英文直接复制就可以
    if( *(pText + i) >= 0)
    {
    rst[j++] = pText[i++];
    }
    else
    {
    wchar_t pbuffer;
    Gb2312ToUnicode(&pbuffer,pText+i); UnicodeToUTF_8(buf,&pbuffer); unsigned short int tmp = 0;
    tmp = rst[j] = buf[0];
    tmp = rst[j+1] = buf[1];
    tmp = rst[j+2] = buf[2];     j += 3;
    i += 2;
    }
    }
    rst[j] = '\0'; //返回结果
    pOut = rst;             
    delete []rst;    return;
    }void CChineseCode::UTF_8ToGB2312(char* newBuf, char *pText, int pLen)
    {
    char Ctemp[4];
    memset(Ctemp,0,4); int i =0;
    int j = 0; while(i < pLen)
    {
    if(pText[i] > 0)
    {
    newBuf[j++] = pText[i++];                       
    }
    else                 
    {
    WCHAR Wtemp;
    UTF_8ToUnicode(&Wtemp,pText + i); UnicodeToGB2312(Ctemp,Wtemp); newBuf[j] = Ctemp[0];
    newBuf[j + 1] = Ctemp[1]; i += 3;    
    j += 2;   
    }
    }
    newBuf[j] = '\0';
    return; 
    }inline BYTE toHex(const BYTE &x)
    {
    return x > 9 ? x + 55: x + 48;
    }
    inline BYTE toByte(const BYTE &x)
    {
    return x > 57? x - 55: x - 48;
    }
    CString URLDecode(CString sIn)
    {
    CString sOut;
    const int nLen = sIn.GetLength() + 1;
    register LPBYTE pOutTmp = NULL;
    LPBYTE pOutBuf = NULL;
    register LPBYTE pInTmp = NULL;
    LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
    //alloc out buffer
    pOutBuf = (LPBYTE)sOut.GetBuffer(nLen); if(pOutBuf)
    {
    pInTmp   = pInBuf;
    pOutTmp = pOutBuf;
    // do encoding
    while (*pInTmp)
    {
    if('%'==*pInTmp)
    {
    pInTmp++;
    *pOutTmp++ = (toByte(*pInTmp)%16<<4) + toByte(*(pInTmp+1))%16;//高4位+低4位
    pInTmp++;
    }
    else if('+'==*pInTmp)
    *pOutTmp++ = ' ';
    else
    *pOutTmp++ = *pInTmp;
    pInTmp++;
    }
    *pOutTmp = '\0';
    sOut.ReleaseBuffer();
    }
    sIn.ReleaseBuffer(); return sOut;
    }
    CString URLEncode(CString sIn)
    {
    CString sOut;
    const int nLen = sIn.GetLength() + 1;
    register LPBYTE pOutTmp = NULL;
    LPBYTE pOutBuf = NULL;
    register LPBYTE pInTmp = NULL;
    LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
    //alloc out buffer
    pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3); if(pOutBuf)
    {
    pInTmp   = pInBuf;
    pOutTmp = pOutBuf;
    // do encoding
    while (*pInTmp)
    {
    if(isalnum(*pInTmp) || '-'==*pInTmp || '_'==*pInTmp || '.'==*pInTmp)
    *pOutTmp++ = *pInTmp;
    else if(isspace(*pInTmp))
    *pOutTmp++ = '+';
    else
    {
    *pOutTmp++ = '%';
    *pOutTmp++ = toHex(*pInTmp>>4);//高4位
    *pOutTmp++ = toHex(*pInTmp%16);//低4位
    }
    pInTmp++;
    }
    *pOutTmp = '\0';
    sOut.ReleaseBuffer();
    }
    sIn.ReleaseBuffer(); return sOut;
    }