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

摘要:
编码函数:QByteArrayencodeURI(QStringstr){QByteArrayarray;QTextCodec*codec=QTextCodec::codecForName("GBK");QByteArraytmpArray;tmpArray=codec-˃fromUnicode(str);for(inti=0,size=tmpArray.length();i˂size;i++){

编码函数:

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);
        }
    }
    returnarray;
}

解码函数:

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);
}

免责声明:文章转载自《Qt中gb2312/GBK的URL编解码函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android实现高性能,高并发,可延时线程池管理cesium贴地代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

AR的一些常见的操作

一、查询数据集合 1、$admin=Admin::model()->findAll($condition,$params); 该方法是根据一个条件查询一个集合,如:   findAll("username=:name",array(":name"=>$username));      2、$admin=Admin::model()->...

Python学习笔记:字符编码原理和操作详解

一、电脑字符集的历史   1、电脑是如何将二进制与字符对应起来的?     我们知道,电脑底层只认识0和1的二进制数据,为了让电脑可以跟人类互动,我们使用8个二进制位(即1个字节)来对应一个更复杂的数字,     比如:使用二进制“01000001”来指代十进制“65”,也就是大写字母A     实际使用场景中,人类利用键盘打字符“A”时,实际上是打65这...

C#操作MySQL时,出现的中文乱码的解决方案

最终解决方案:1、选用gb2312编码2、设置my.ini文件中的默认编码   分别在[mysql]和[mysqld]配置段中增加或修改default_charater_set=gb2312 3、创建数据库时编码选用gb2312 4、创建表时编码选用gb2312,Collation选用gb2312_chines_ci(gb2312_bin没有去试验)...

Java中文乱码原因

Java中文乱码原因 Java在中文环境中乱码无处不在,而且出现的时间和位置也包涵广泛,具体的解决方法也是千奇百怪。 但是如果能理清其中的脉络,理解字符处 理的过程,对于解决问题很有指导意义,不至于解决了问题也不知道为什么。 其实,原因不外乎出在String输入时和输出时。 首先,Java中的任何String都是以UNICODE格式存在的。 很多人因为在G...

Linux内核调试方法总结之backtrace

backtrace 【用途】用户态或者内核态程序异常退出时回溯堆栈信息 【原理】通过对当前堆栈的分析,回溯上层函数在当前栈中的帧地址,直至顶层函数。帧地址是指在栈中存在局部变量、上一级函数返回地址、寄存器值的内存空间。由于不同处理器堆栈实现不同(向上增长和向下增长),此功能的具体实现是编译器内建的__buildin_frame_address及__buil...

Java处理不同的字符编码流

在实际开发中,可能会处理一些文本信息,我们可能使用 BufferedReader bfr = new BufferedReader(new InputStreamReader(bis,encoding)); 这样的方式来处理输入流,然后就可以一行一行的处理信息了。 但是,这里的encoding一般都不会确定,有的是GBK格式,有的是UTF-8格式,可能还有...