Qt中gb2312/GBK的URL编解码函数

编码函数:

QByteArray encodeURI(QString str)
{
    QByteArray array;
    QTextCodec *codec=QTextCodec::codecForName("GBK");
    QByteArray tmpArray;
    tmpArray = codec->fromUnicode(str);
    for(int i=0,size = tmpArray.length();i<size;i++){
        char ch = tmpArray.at(i);
        if((ch>=‘0‘&&ch<=‘9‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)){
            array.append(ch);
        }else{
            uchar low = ch & 0xff;
            char c[3];
            sprintf(c,"%02X",low);
            array.append("%").append(c);
        }
    }
    return array;
}

解码函数:

QString decodeURI(QString str)
{
    QByteArray array;
    for(int i=0; i<str.length();) {
        if (0==QString::compare(str.mid(i,1), QString("%"))) {
            if ((i+2)<str.length()) {
                array.append(str.mid(i+1,2).toShort(0,16));
                i=i+3;
            }
            else{
                array.append(str.mid(i,1));
                i++;
            }
        }
        else{
            array.append(str.mid(i,1));
            i++;
        }
    }
    QTextCodec *code=QTextCodec::codecForName("GBK");
    return code->toUnicode(array);
}
时间: 2024-10-09 12:25:17

Qt中gb2312/GBK的URL编解码函数的相关文章

在.NET中使用Speex -- 音频数据编解码

Speex是一套开源的音频编解码库,最新版本还包含了回音消除和防抖动等功能,如果我们想开发语音聊天或视频会议这样的系统,Speex将是一个不错的选择.到 http://www.speex.org可以下载Speex的源码(编译后的dll为libspeex.dll),最新版本为1.2.不过源码是用C++开发的,直接在.NET中使用会有诸多不便,为此,我用C#将其封装,使得编解码的调用相当简单. 由于Speex原始导出的API不是很方便C#调用,所以,在用C#封装之前,先要用C++对Speex的原始A

QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)

使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit()以及close().    首先说明窗口退出时,系统提示对话框的代码编辑.对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都能起到关闭应用程序的作用.只是应注意二者调用的方式不同.如下程序示例:        {         QApplication* a

实际项目中前后端传输字符串URL编解码过程中遇到的一些问题

线上版本(包括12.2,12.3版本)中,参照过滤条件在传输过程中经过了URL编码及解码过程,前后端使用的API之间的差异导致一些问题,现记录如下: 前端URL编码API encodeURIComponent使用UTF-8编码格式对字符串进行URL编码: 后端URL解码API:目前代码中存在以下三种解码方式: System.Web.UI.Server.UrlDecode,存在问题:无法解析%2B为+,输出为空白字符: Microsoft.JScript.GlobalObject.unescape

Delphi 自带的 Base64 编解码函数

今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStream); // 编码procedure DecodeStream(Input, Output: TStream); // 解码 // 对字符串的编解码:function E

VC实现URL编解码

bool DecodeUrl(char *Src, char *url, int MaxLen) { if(NULL == url || NULL == Src) { return false; } if(MaxLen == 0) { return false; } char *p = Src; // 用来循环 int i = 0; // i用来控制url数组 /* 临时保存url编码的数据 例如: %1A%2B%3C */ char t = '\0'; while(*p != '\0' &&am

url编解码

代码 from urllib.parse import quote,unquote,urlencode print(quote('https://www.cnblogs.com/?a=bc&d=f')) print(urlencode({'a':'b','b':'c'})) print(unquote('https%3A//www.cnblogs.com/%3Fa%3Dbc%26d%3Df')) print(unquote('a=b&b=c')) #编码 #quote操作的是字符串类型,把

在C语言中使用Libb64进行Base64编解码

Libb64下载地址http://sourceforge.net/projects/libb64 以下为Demo CLibb64Demo.c #include <stdio.h> #include <string.h> #include "libb64/cencode.h" #include "libb64/cdecode.h" void base64EncodeString(const char *textToEncode, char *b

详解JavaScript中的Url编码/解码,表单提交中网址编码

本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape,encodeURI / decodeURI和 encodeURIComponent / decodeURIComponent. 预备知识 foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/ \_______

各种音视频编解码学习详解

各种音视频编解码学习详解 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等.最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了.所以豆丁上看不出所以然,从 wiki上查.中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版