【转】C# 中文URL编码

本文介绍如何处理URL中的中文及特殊字符编码,包括不同网站的编码方式对比,以及使用C#进行URL编码和解码的方法。

 

 
正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页。原理很简单。比如在Google搜索China,搜索结果页面的URL就是&ldq

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值