zoukankan      html  css  js  c++  java
  • C# 中文URL编码

    正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页。原理很简单。比如在Google搜索China,搜索结果页面的URL就是“http://www.google.com/search?hl=zh-CN&q=China&lr=”。只要替换红颜色的内容,就可以按照不同的关键字搜索。

    但是如果关键字是中文,就会出现问题。比如在google搜索“中国”,Url是“http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E5%9B%BD&lr=”。汉字“中国”被按照UTF-8的格式进行编码。

    不仅汉字进行编码,一些特殊字符也会进行编码。比如搜索“C#”,URL是“http://www.google.com/search?hl=zh-CN&newwindow=1&q=C%23&lr=”。

    一般来说,国外的网站都是按照UTF-8编码,而“百度”是按照“GB2312”进行编码的。比如搜索“中国”,URL是“http://www.baidu.com/s?wd=%D6%D0%B9%FA&cl=3”

    我们对比一下:C#中国的编码

    编码 结果 网站
    UTF-8 C%23%E4%B8%AD%E5%9B%BD Google
    GB2312 C%23%D6%D0%B9%FA BaiDu

    总结:
    UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节。
    不论何种编码,字母数字都不编码,特殊符号编码后占用一个字节。

    //按照UTF-8进行编码
    string tempSearchString1 = System.Web.HttpUtility.UrlEncode("C#中国");
    //按照GB2312进行编码
    string tempSearchString2 = System.Web.HttpUtility.UrlEncode("C#中国",System.Text.Encoding.GetEncoding("GB2312"));

    //--------------------------------------------------------------------------------------------------------------

    【转】ASP.NET中c#的URL编码处理
    要解决的问题:
    将下面的URL作为一个参数传到其他的页面
    1 http://domain/de.apx?uid=12&page=15
    2 url后面的参数中出现汉字等,如: ....aspx?title=起重机
    在出现上面的情况的时候,必须经过一个RUL编码和解码的过程,否则会出现错误.


    代码如下:


    //传值
    string temp = " <a href='Add.aspx?url=" +Server.UrlEncode( skin.Page.Request.Url.AbsoluteUri )+ "&title=" +Server.UrlEncode( skin.Page.Header.Title )+ "'>添加到收藏夹</a>");

    //在另外一个文件中取从上面传的值
    if (Request.QueryString["url"] != null)
    {
        string url = Server.UrlDecode(Request.QueryString["url"].ToString());
        this.txtAddress.Text = url;
    }
    if (Request.QueryString["title"] != null)
    {
        string title = Server.UrlDecode(Request.QueryString["title"].ToString());
        this.txtTitle.Text = title;
    }

    //-----------------------------------------------

    URL编码对照表

    1、string s = System.Web.HttpUtility(byte[] data);

    这里的s即为转换出来的URL编码,需要注意的是这里的byte数组必须是具有ASCII意义的数组,由string通过System.Text.Encoding.Default.getBytes(str.ToCharArray());是不正确的,不能正确转义!

    2、根据URL编码规则写个小程序

    ******* string UrlEncode(byte[] byt)
      {  
         string  desstr = "";  
         for(int i=0; i<byt.Length;i++)  
         {  
          desstr += "%";  
          desstr += byt[i].ToString("X2");  
         }
         return desstr;
      }

    以下是URL编码对照表:

    backspace %08
    tab       %09
    linefeed  %0A
    creturn   %0D
    space     %20
    !         %21
    "         %22
    #         %23
    $         %24
    %         %25
    &         %26
    '         %27
    (         %28
    )         %29
    *         %2A
    +         %2B
    ,         %2C
    -         %2D
    .         %2E
    /         %2F
    0         %30
    1         %31
    2         %32
    3         %33
    4         %34
    5         %35
    6         %36
    7         %37
    8         %38
    9         %39
    :         %3A
    ;         %3B
    <         %3C
    =         %3D
    >         %3E
    ?         %3F
    @         %40
    A         %41
    B         %42
    C         %43
    D         %44
    E         %45
    F         %46
    G         %47
    H         %48
    I         %49
    J         %4A
    K         %4B
    L         %4C
    M         %4D
    N         %4E
    O         %4F
    P         %50
    Q         %51
    R         %52
    S         %53
    T         %54
    U         %55
    V         %56
    W         %57
    X         %58
    Y         %59
    Z         %5A
    [         %5B
    \         %5C
    ]         %5D
    ^         %5E
    _         %5F
    `         %60
    a         %61
    b         %62
    c         %63
    d         %64
    e         %65
    f         %66
    g         %67
    h         %68
    i         %69
    j         %6A
    k         %6B
    l         %6C
    m         %6D
    n         %6E
    o         %6F
    p         %70
    q         %71
    r         %72
    s         %73
    t         %74
    u         %75
    v         %76
    w         %77
    x         %78
    y         %79
    z         %7A
    {         %7B
    |         %7C
    }         %7D
    ~         %7E
    ¢         %A2
    £         %A3
    ¥         %A5
    |         %A6
    §         %A7
    ?         %AB
    ?         %AC
    ˉ         %AD
    o         %B0
    ±         %B1
    a         %B2
    ,         %B4
    μ         %B5
    ?         %BB
    ?         %BC
    ?         %BD
    ?         %BF
    A`         %C0
    A′         %C1
    A^         %C2
    A~         %C3
    A¨         %C4
    A°         %C5
    ?         %C6
    C?         %C7
    E`         %C8
    E′         %C9
    E^         %CA
    E¨         %CB
    I`         %CC
    I′         %CD
    I^         %CE
    I¨         %CF
    D         %D0
    N~         %D1
    O`         %D2
    O′         %D3
    O^         %D4
    O~         %D5
    O¨         %D6
    ?         %D8
    U`         %D9
    U′         %DA
    U^         %DB
    U¨         %DC
    Y′         %DD
    T         %DE
    ?         %DF
    a`         %E0
    a′         %E1
    a^         %E2
    a~         %E3
    a¨         %E4
    a°         %E5
    ?         %E6
    c?         %E7
    e`         %E8
    e′         %E9
    e^         %EA
    e¨         %EB
    i`         %EC
    i′         %ED
    i^         %EE
    i¨         %EF
    e         %F0
    n~         %F1
    o`         %F2
    o′         %F3
    o^         %F4
    o~         %F5
    o¨         %F6
    ÷           %F7
    ?            %F8
    u`           %F9
    u′           %FA
    u^           %FB
    u¨         %FC
    y′           %FD
    t            %FE
    y¨         %FF 

    //--------------------------------------------------------------

    http://www.baidu.com/s?wd=%CA%C0%BD%E7%B1%AD&cl=3  
      通过     System.Web.HttpUtility.UrlDecode能把%CA%C0%BD%E7%B1%AD解码成世界杯  
      但在   http://www.google.com输入世界杯       http://www.google.com/search?hl=zh-CN&q=%E4%B8%96%E7%95%8C%E6%9D%AF&lr=     我也用System.Web.HttpUtility.UrlDecode但不能解码成世界杯,是乱码  
      那怎么把%E4%B8%96%E7%95%8C%E6%9D%AF解码成世界杯

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhongzhengfeng/archive/2008/11/06/3236551.aspx

  • 相关阅读:
    Redis:特殊数据类型,hyperloglog(基数),bitmap(位存储)
    Redis:特殊类型geospatial(地理位置类型,纬经度)
    Redis:zset常用指令
    Redis:hash常用指令
    Redis:set集合常用常用指令
    Pytorch学习-数据操作
    天池Python训练营笔记—Python基础入门:从变量到异常处理
    Python基础语法快速复习-面对对象编程
    Python基础语法快速复习-函数式编程
    Python基础语法快速复习-高级特性
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668428.html
Copyright © 2011-2022 走看看