zoukankan      html  css  js  c++  java
  • URL的UTF-8 decode

    #pragma warning(disable:4996)
    //不显示控制台  那个改成窗口 系统里面的子系统改成窗口
    #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
    #include<atlstr.h>
    #include<stdio.h>
    #include<algorithm>
    #include<string>
    #include<iostream>
    #include<stdlib.h>
    #include<windows.h>
    
    using namespace std;
    #define IsHexNum(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))
    
    //urf8编码字符串处理 
    WCHAR* Utf8ToStringT(LPSTR str)
    {
        _ASSERT(str);
        USES_CONVERSION;
        WCHAR* buf;
        int length = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);//映射一个字符串到一个宽字符
        //1.指定执行转换的多字节字符所使用的字符集   2.一组位标记,一般不用为0 3.指向 待转换的字符串的缓冲区 
        //4.指定由参数 lpMultiByteStr指向的字符串中字节的个数。可以设置为-1,会自动判断lpMultiByteStr指定的字符串的长度
        //5.指向 接收被转换字符串的缓冲区
        //6.指定由参数 lpWideCharStr指向的缓冲区的宽字节数。若此值为0,函数不会执行转换,而是返回目标缓存lpWideChatStr所需的宽字符数。
        buf = new WCHAR[length + 1];
        ZeroMemory(buf, (length + 1) * sizeof(WCHAR));
        MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, length);
        return buf;
    }
    
    //url编码字符串解码函数 
    WCHAR* UrlDecode(LPCTSTR url) //const wchar_t *
    {
        _ASSERT(url);//它的条件返回错误,则终止程序执行。
        USES_CONVERSION; // USES_CONVERSION它是在堆栈上分配空间的
        LPSTR _url = T2A(const_cast<LPTSTR>(url)); //char* C消失了...表示常量... //CString ==> char*
        int i = 0;
        int length = (int)strlen(_url);
        CHAR* buf = new CHAR[length];
        ZeroMemory(buf, length);
        LPSTR p = buf;
        char tmp[4];
        while (i < length)
        {
    
            if (i <= length - 3 && _url[i] == '%' && IsHexNum(_url[i + 1]) && IsHexNum(_url[i + 2]))
            {
                memset(tmp, 0, sizeof(tmp));
                memcpy(tmp, _url + i + 1, 2);
                sscanf(tmp, "%x", p++);
                i += 3;
            }
            else
            {
                *(p++) = _url[i++];
            }
        }
        return Utf8ToStringT(buf);
    }
    
    int main(int argc,char *argv[])
    {
        setlocale(LC_ALL, "");
        for (int i = 0; i < argc; i++)
        {
            //cout << argv[i] << endl << endl;
            if(i == 1)
            {
                WCHAR p[1000];
                swprintf(p, 1000, L"%hs", argv[1] + 8);
                WCHAR *proW = UrlDecode(LPCTSTR(p));
                //wprintf(L"%ls
    
    ", proW);
                char callEXE[2000];
                sprintf(callEXE, "%ws", proW);
                //cout << callEXE << endl;
                WinExec(callEXE, SW_HIDE);
            }
        }
        return 0;
    }

     参考来自:https://blog.csdn.net/kissing7/article/details/76684085?utm_medium=distribute.wap_relevant.none-task-blog-baidujs_baidulandingword-1 这边还有encode

  • 相关阅读:
    left join 多表关联原理
    自适应居中n中方法
    docker 安装 卸载 Kubernetes安装
    jquery动态生成二维码图片,点击居中展示大图
    shiro 提供对外接口 实现一致性权限
    margin:0 auto解释;图片点击放大全屏
    编程总结
    eclipse插件安装和卸载方式
    ERROR org.hibernate.search.exception.impl.LogErrorHandler
    spring依赖注入和控制反转
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/14849713.html
Copyright © 2011-2022 走看看