walt

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  4 随笔 :: 3 文章 :: 1 评论 :: 0 Trackbacks

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

大家好,
刚开始接触QT,还不太懂希望大家多交流。
由于想写一个简单的程序涉及到编码转换的问题,故将学到的点滴分享一下。

说明:
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
posted on 2010-05-05 13:29 白宇皓 阅读(5108) 评论(1)  编辑 收藏 引用

评论

# re: 转载 QT4.6中文GB2312与utf-8和unicode及URL encoding %编码汇总[未登录] 2013-04-25 17:54 王小亮
嗯,学习了。不错的  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理