您的位置:首页 > 编程语言 > C#

【转】C# 中文URL编码

2011-08-14 10:03 134 查看
正在研究一个程序,输入一个关键字,能够把这个关键字发送到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: