程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> url-MFC URL編碼 含有中文編碼問題求解

url-MFC URL編碼 含有中文編碼問題求解

編輯:編程解疑
MFC URL編碼 含有中文編碼問題求解

程序裡需要通過URL傳遞參數,裡面如果有中文的話就變成?????,程序設置為多字節。
求一個可以用的 URL編碼例子

最佳回答:


自己解決了 轉化例子

 void UnicodeToUTF_8(char* pOut, WCHAR* 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 GB2312ToUTF_8(CString& pOut, char *pText, int pLen)
{
    char buf[4];
    memset(buf, 0, 4);
    pOut.Empty();
    int i = 0;
    while (i < pLen)
    {
        //如果是英文直接復制就可以 
        if (pText[i] >= 0)
        {
            char asciistr[2] = { 0 };
            asciistr[0] = (pText[i++]);
            pOut.Append(asciistr);
        }
        else
        {
            WCHAR pbuffer;
            Gb2312ToUnicode(&pbuffer, pText + i);
            UnicodeToUTF_8(buf, &pbuffer);
            pOut.Append(buf);
            i += 2;
        }
    }
    return;
}
void Gb2312ToUnicode(WCHAR* pOut, char *gbBuffer)
{
    ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, gbBuffer, 2, pOut, 1);
    return;
}
CString UrlUTF8(char * str)
{
    CString tt;
    CString dd;
    GB2312ToUTF_8(tt, str, (int)strlen(str));
    size_t len = tt.GetLength();
    for (size_t i = 0; i<len; i++)
    {
        if (isalnum((BYTE)tt.GetAt(i)))
        {
            char tempbuff[2] = { 0 };
            sprintf(tempbuff, "%c", (BYTE)tt.GetAt(i));
            dd.Append(tempbuff);
        }
        else if (isspace((BYTE)tt.GetAt(i)))
        {
            dd.Append("+");
        }
        else
        {
            char tempbuff[4];
            sprintf(tempbuff, "%%%X%X", ((BYTE)tt.GetAt(i)) >> 4, ((BYTE)tt.GetAt(i)) % 16);
            dd.Append(tempbuff);
        }
    }
    return dd;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved