Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 百度搜索URL生成函数-C#
【标  题】:百度搜索URL生成函数-C#
【关键字】:URL,-C#
【来  源】:http://www.cublog.cn/u/17347/showart.php?id=151376

百度搜索URL生成函数-C#

Your Ad Here
最近在编程做一个Web Service已提供给自己的应用程序以分析后百度的搜索结果,要取得百度的搜索结果就要生成其搜索URL,最主要的问题在于汉字的编码,下面我找到的一些资料和心得.
 
在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。
例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。
 
baidu和yisou的编码方式是安下面的方法编码的:
url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上"%"。比如"",它的ascii码是92,92的十六进制是5c,所以""的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:"胡"的ascii码(区位码?)是-17670,十六进制是BAFA,url编码是"%BA%FA"。
针对百度,总结如下:
1,不需要编码的是: 大小写字母,减号和英文句点.
2,空格转化为+号,是相与操作.
3,汉字按'gb2312'编码,每字符对应二个字节.
4,特殊符号编码后占用一个字节.
 
用C#编了个函数如下:
 
        public string CharacterToCoding(string character)
        {
            string coding = "";
            string lowCode = "";
            string highCode = "";
            const string PRE = "%";
            for (int i = 0; i < character.Length; i++)
            {
                byte[] bytes = System.Text.Encoding.Default.GetBytes(character.Substring(i, 1));
                if(bytes[0]>128){   //大于80H,是汉字
                    lowCode = System.Convert.ToString(bytes[0], 16);
                    highCode = System.Convert.ToString(bytes[1], 16);
                    coding += (PRE + lowCode + PRE + highCode);
                }
                else if ((bytes[0] > 96 && bytes[0] < 123) || (bytes[0] > 64 && bytes[0] < 91)){        //是字母
                    coding += character.Substring(i, 1);
                }
                else if ( (bytes[0]>47 && bytes[0]<58) || (bytes[0]==45) || (bytes[0]==46) ){           //是数字或减号或英文句点
                    coding += character.Substring(i, 1);
                }else if (bytes[0]==32){            //是空格
                    coding += "+";
                }else{
                    coding += (PRE + System.Convert.ToString(bytes[0], 16) );
                }
            }
            return coding;
        }
 
还没有处理连续的空格,有什么问题请大家拍砖!
SQL Server 安装:以前的某个程序安装已在安装计算机上创建挂起的文件操作:【上一篇】
C语言常用排序全解:【下一篇】
【相关文章】
  • urlRewriteFilter来实现url的美化
  • curl的又一应用
  • 负载均衡软件实现方式之一 - URL重定向方式
  • curl的Manual
  • curl学习
  • PHP当中取得URL及物理路径的总结
  • 一个强大的文件下载工具curl(zz)
  • 提倡DNS过滤,减少URL过滤
  • Javasacript获取指定URL中的指定参数
  • 在ASP.NET中实现Url Rewriting(非常的有价值!)
  • 【随机文章】
  • Date类(C++ Programming Language第10章课后题10.6.2的一部分)
  • 怎样设置FTP上传文件
  • Win32全局钩子在VC5中的实现
  • 初出茅庐,未敢说志与天齐
  • RH Linux 9下面的VPN Server架设指南
  • 周华健新专辑《雨人》3.31世界同步发行
  • 关于Windows下ShellCode编写的一点思考
  • Oracle初学者笔记(九)--Oracle中的对象(可变数组)
  • 缓存类的实现(C#)
  • 学会使用terminate()函数
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.