Server.UrlEncode与HttpUtility.UrlDecode使用 urlencode decode

原文地址: http://www.cnblogs.com/michaelShao/archive/2010/01/07/1641062.html
http://hi.baidu.com/fangjun953322/item/041d9bf3adb76dc2a835a29e

Server.UrlEncode编码是使用系统默认的,而 System.Web.HttpUtility.UrlEncode却可以指定编码。如:System.Web.HttpUtility.UrlEncode("中文",Encoding.UTF8);

HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode的时候将加号转为空格
解决办法是, 在 HttpUtility 的 UrlEncode 之后, 将 "+" 替换成 " "( 如果原来是 "+" 则被转换成" " )


Server.URLEncode方法会在一个字符串上应用URL的编码规则, 包括转义字符.

URLEncode会如下转换字符:

举例:

<%Response.Write(Server.URLEncode("http://www.microsoft.com"))%>

输出结果为

http://www.microsoft.com

HttpUtility.UrlEncode方法可以被用来编码整个URL,包括查询字符串值(query-string values). 诸如空格和其他的标点符号传入HTTP stream的时候,他们可能会被误解析为流的结尾. URL encoding会把这些URL中不允许出现的字符转换为等同的字符实体. URLdecoding会执行逆操作.

你可以使用UrlEncode()方法或UrlPathEncode()方法. 然而, 这两个方法的返回值是不同的.

UrlEncode()方法会把空格转换为加号(+).

UrlPathEncode()方法会把空格转换为字符串" ",这也是空格的十六进制的表示方式.

你应该在对URL中的path部分编码时使用UrlPathEncode()方法, 这样能确保不论在什么平台或浏览器上执行解码的时候,都会得到一个合法的URL.

两个方法的区别

他们之间没有什么具体的区别. Server.UrlEncode的存在是因为需要与经典的ASP兼容.

HttpServerUtility.UrlEncode 会在内部调用HttpUtility.UrlEncode.


在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?
测试:
string file="文件上(传)篇.doc";
string Server_UrlEncode=Server.UrlEncode(file);
stringServer_UrlDecode=Server.UrlDecode(Server_UrlEncode);
stringHttpUtility_UrlEncode=System.Web.HttpUtility.UrlEncode(file);
stringHttpUtility_UrlDecode=System.Web.HttpUtility.UrlDecode(HttpUtility_UrlEncode);
Response.Write("原数据:"+file);
SFun.WriteLine("Server.UrlEncode:"+Server_UrlEncode);
SFun.WriteLine("Server.UrlDecode:"+Server_UrlDecode);
SFun.WriteLine("HttpUtility.UrlEncode:"+HttpUtility_UrlEncode);
SFun.WriteLine("HttpUtility.UrlDecode:"+HttpUtility_UrlDecode);
Server.UrlEncode与HttpUtility.UrlDecode使用 urlencode decode

输出:
原数据:文件上(传)篇.doc
Server.UrlEncode:�ļ��ϣ�����ƪ.doc
Server.UrlDecode:文件上(传)篇.doc
HttpUtility.UrlEncode:文件上(传)篇.doc
HttpUtility.UrlDecode:文件上(传)篇.doc

区别在于:HttpUtility.UrlEncode()默认是以UTF8对URL进行编码,而Server.UrlEncode()则以默认的编码对URL进行编码。

在用 ASP.Net 开发页面的时候, 我们常常通过 System.Web.HttpUtility.UrlEncode 和UrlDecode 在页面间通过 URL 传递参数. 成对的使用 Encode 和 Decode是没有问题的.

但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:
Response.AddHeader("Content-Disposition","attachment;filename="
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
之所以转换成 UTF8 是为了支持中文文件名.

这 时候问题就来了, 因为 HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件,空格就变成了加号.

一个解决办法是, 在 HttpUtility 的 UrlEncode 之后, 将 "+" 替换成 " "( 如果原来是 "+"则被转换成 "+" ) , 如:
fileName = HttpUtility.UrlEncode(fileName,Encoding.UTF8);
fileName = fileName.Replace("+", "");
不明白微软为什么要把空格转换成加号而不是" ". 记得 JDK 的 UrlEncoder 是将空格转换成 ""的.
经检查, 在 .Net 2.0 也是这样.
  默认aspx是以utf-8为编码的,程序中必须用gb2312为默认编码(<globalizationrequestEncoding="gb2312"responseEncoding="gb2312"/>),问题出现了,以前没有问题的HttpUtility.UrlDecode在Page.Request回的值是乱码这就是上面说的HttpUtility.UrlDecode默认以UTF8对URL进行编码,这种情况下面只需将HttpUtility.UrlDecode改成Server.UrlEncode即可。

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/190049.html

更多阅读

HC-05蓝牙模块与单片机的使用 hc05蓝牙模块

HC-05蓝牙模块与单片机的使用——简介关于HC-05蓝牙模块如何搭配单片机使用,还是以Arduino UNO升级改进版Manduino UNO为例,进行说明。HC-05蓝牙模块适用于各种3.3V的单片机系统,模块可以使用AT指令设置波特率配对、密码用户信息等,默

B-LINK WA系列无线路由器安装与设置 华为wa603dn刷dlink

B-LINK WA系列无线路由器安装与设置——简介使用ADSL拨号上网连接方式B-LINK WA系列无线路由器安装与设置——工具/原料B-LINK WA系列无线路由器B-LINK WA系列无线路由器安装与设置——安装步骤与方法B-LINK WA系列无线路由器安

iphone5使用教程 iphone6s使用教程

iphone5使用教程——简介iphone5是外观大变,功能小变,基本的使用方式与iphone4,iphone4S保持一致。iphone5使用教程——工具/原料iphone5iphone5使用教程——方法与步骤iphone5使用教程 1、若要開始使用,請按住“開 / 關”按鈕幾秒來

电脑与投影仪的使用方法。 实物投影仪使用方法

电脑与投影仪的使用方法。——简介现在电脑的使用已经十分的广泛,我们的生活也因为电脑扩展了很多,在我们的生活里也多了很多其他与电脑连接的辅助工具。下面我来说说投影仪与电脑连接的方法,方便大家经常性的使用,我的方法有什么不对的

声明:《Server.UrlEncode与HttpUtility.UrlDecode使用 urlencode decode》为网友朦胧时间分享!如侵犯到您的合法权益请联系我们删除