2 pingkai1217 pingkai1217 于 2016.03.21 14:15 提问

MFC URL编码 含有中文编码问题求解

程序里需要通过URL传递参数,里面如果有中文的话就变成?????,程序设置为多字节。
求一个可以用的 URL编码例子

2个回答

pingkai1217
pingkai1217   2016.03.21 16:04
已采纳

自己解决了 转化例子

 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;
}
qq_34320560
qq_34320560   2016.03.21 14:23

将参数中的中文内容base64编码,然后再传输,在服务端再进行解码,这样就不会乱码了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA 需要打开的url含有中文时的编码问题
每次JAVA传参涉及到中文时,总要被虐,这次虽然最后的解决还是比较简单的,但为了纪念中间走的弯路还是决定记录一下~~~1、从前台(jsp)到后台(java)时传递了一个中文参数:name 此时为防止乱码,需要编码成 utf-8(此处也可以编码成 GBK和gb2312 格式,前提是要和你前台设置的编码格式相同)
IOS把url中含有的中文字符转化为UTF8编码方法
今天做项目的时候遇到,需要把汉字放进url,例如http://lolbox.duowan.com/phone/apiCheckUser.php?action=getPlayersInfo&serverName=电信十四&target=蛋壳儿 但是直接这样请求的话,提示url是不符合要求的,无法获得数据。这就需要把url转化为utf8编码的格式//预留参数的网址 NSString *baseUrlS
VC实现URL编解码
bool DecodeUrl(char *Src, char *url, int MaxLen) { if(NULL == url || NULL == Src) { return false; } if(MaxLen == 0) {
URL传递中文参数乱码----js对url进行编码和解码
URL  中用get 方式传递中文参数,会造成乱码的情况,可以采用前台用JS 编码+后台action 解码的方式解决。但是有时候,后台的action 不可见的时候,就需要在前台 用 JS 完成编码+解码的工作。 js对url进行编码和解码的三种方式和区别 *** 只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不经过编码直接用于
Android编码包含中文的URI
做过Java的都知道,Java中可以通过URLEncoder对url编码, 但是如果你拿到的uri是别人已经拼好的, 比如是服务端返回的uri, 这时候你会发现用URLEncoder已经解决不了你的问题了,因为它会把url中所有非ASCII编码的字符都进行编码, 结果不是我们想要的。要解决此问题有很多种办法,比如通过正则替换, 递归遍历字符替换等。 我这里要说的是一个最简捷的实现。用到的类:andr
Swift学习笔记 - URL编码encode与解码decode
使用swift有一段时间了,api的变换造成了很多困扰,下面是关于url编码和解码问题的解决方案 在Swift中URL编码encode在Swift中URL编码用到的是String的方法func addingPercentEncoding(withAllowedCharacters allowedCharacters: CharacterSet) -> String?用法:let str = {url
一个URL编码和解码的C++类
#pragma once#include #include #include using namespace std;class strCoding{public:    strCoding(void);    ~strCoding(void);       void UTF_8ToGB2312(string &pOut, char *pText, int pLen);//utf_8转
iOS中 url带汉字时的编码转换
NSString *string = [NSString stringWithFormat:@"%@%@", wwwUrl, xmlUrl]; string = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *theRequest = [NSMutableUR
xml+xsl应用,包含中文字符的URL编码问题
在xml应用中,经常将一些URL信息作为xml数据存储,其中URL参数有可能包含有中文字符。当使用dom对xml数据进行解析时,可以对中文字符进行编码。但如果只使用xslt来显示xml数据时(data.xml+data.xsl),发现此时的URL会出现编码错误.即使指定编码类型(encoding="gb2312"),依然会出现同样的问题.测试发现:是IE的缓存机制问题,IE仍会把新的页面(所链接的
【转】C# 中文URL编码
正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页。原理很简单。比如在Google搜索China,搜索结果页面的URL就是&ldq 正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页。原理很简单。比如在Google搜索China,搜索