博客园  :: 联系 :: 管理

【转】C# 中文URL编码

Posted on 2011-08-14 10:03  独孤雁  阅读(2467)  评论(0编辑  收藏  举报

正在研究一个程序,输入一个关键字,能够把这个关键字发送到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