zoukankan      html  css  js  c++  java
  • QT4.6中文GB2312与utf-8和unicode及URL encoding %编码汇总

    QT4.6中文GB2312与utf-8和unicode及URL encoding %编码汇总


    说明: 转载

    windows中ie地址栏写“我们”发送到服务器端会变为“%CE%D2%C3%C7”,是GB2312转换成URL 百分号编码的形式
    ubuntu中firefox地址栏写“我们”发送到服务器变成"%E6%88%91%E4%BB%AC",是UTF-8转换成URL 百分号编码的形式


    下面分享汇总后的转换代码:(我的环境:ubuntu9.10 QT4.6)
                    //Ubuntu firefox http get "我们" %E6%88%91%E4%BB%AC UTF-8
                    //Windows ie http get "我们" %CE%D2%C3%C7 GB2312
                    char* s="0x我们";   //UTF-8 char*
                    QString strT1="0x%CE%D2%C3%C7";  //GB2312的URL百分号编码
                    QByteArray baT1,baT2,baT3,baT4;
                    PercentEncoding2ByteArray(strT1, baT1);  //自己写的函数,由于QUrl::fromPercentEncoding仅适用UTF-8的URL编码

                    strT1=QTextCodec::codecForName("GB2312")->toUnicode(baT1);  //GB2312's QByteArray Convert to QString Unicode
                    baT2=QTextCodec::codecForName("GB2312")->fromUnicode(strT1);    //QString Unicode convert to GB2312 QByteArray
                    QString strT2,strT3,strT4,strT5;
                    strT2=QTextCodec::codecForName("UTF-8")->toUnicode("0x我们"); //UTF-8 Char* to Unicode QString
                    baT3=QTextCodec::codecForName("UTF-8")->fromUnicode(strT2);     //Unicode QString to UTF-8 QByteArray
                    strT3=QTextCodec::codecForName("UTF-8")->toUnicode(s); //UTF-8 Char* to Unicode QString
                    strT4=QUrl::toPercentEncoding(QString::fromLocal8Bit(s));   //UTF-8 Char* to PercentEncoding (UTF-8 format)
                    strT5=QUrl::fromPercentEncoding("0x%E6%88%91%E4%BB%AC");    //PercentEncoding (UTF-8 format) to Unicode

                    baT4=QTextCodec::codecForName("GB2312")->fromUnicode(QTextCodec::codecForName("UTF-8")->toUnicode(s));  //UTF-8 Char* to GB2312 QByteArray

    另附一个小函数:(用于GB2312的URL百分号编码转换)
        void PercentEncoding2ByteArray(QString strInput, QByteArray & ByteArrayOut)
        {
            for(int i=0; i<strInput.length();)
            {
                if (0==QString::compare(strInput.mid(i,1), QString("%")))
                {
                    if ((i+2)<strInput.length())
                    {
                        ByteArrayOut.append(strInput.mid(i+1,2).toShort(0,16));
                        i=i+3;
                    }
                    else
                    {
                        ByteArrayOut.append(strInput.mid(i,1));
                        i++;
                    }
                }
                else
                {
                    ByteArrayOut.append(strInput.mid(i,1));
                    i++;
                }
            }//For end

        }// PercentEncoding2ByteArray end
  • 相关阅读:
    关于GIS从业人员的定位
    《企业应用架构模式》读书笔记(4)
    各大网络、软件巨头涉足Web GIS
    流水帐(2005.5)
    Xtreme Suite 和 Toolkit 9.6发布
    一个算法问题
    推荐2个最近使用的软件
    linux之pmap命令
    linux 文件系统简介
    百度脚本笔试题两道
  • 原文地址:https://www.cnblogs.com/ggggyj/p/5054370.html
Copyright © 2011-2022 走看看