C#有关URL中特殊字符的处理

23 篇文章 0 订阅

一、问题 URL 传递时 客户端发送的和服务端接收到的不一致

经分析是因为URL 中含有特殊字符"#$ ^ & * + =",这些字符在URL 中被转义啦!!!

常见的URL 中的特殊字符、表示的意义以及十六进制的表示

字符       意义                                   十六进制
+          URL 中+号表示空格                         %2B 
空格       URL中的空格可以用+号或者编码                %20 
 /         URL 中分隔目录和子目录                     %2F   
?          URL 中分隔实际的 URL 和参数                %3F 
%          URL 中指定特殊字符                         %25 
#          URL 中表示书签                             %23 
&          URL 中指定的参数间的分隔符                  %26 
=          URL 中指定参数的值                         %3D

二、常见解决方法

在 c#中有三种常用的编码方式,可以有效的解决URL传输中特殊字符的问题

1  HttpUtility.UrlEncode      

2  Server.UrlEncode

3  Uri.EscapeUriString

我们以第一个方法为例:

	//需要现在工程中引用System·web
	var tmpURL = @"C:\Users\hu\Desktop\数据\tiemtest\000000#$^&*+=";
    var originalUrl = System.Web.HttpUtility.UrlEncode(tmpURL );
    var serverUrl = System.Web.HttpUtility.UrlDecode(originalUrl);
    //这一步我们发现serverUrl 和tmpURL 是一致的,这样就达到了我们想要的效果

今天介绍另外一种,在URL 中传递文件路径时发现上述问题,于是采用了上述三种方法之外的方法:

三、所用方法

客户端传递URL:

	//先转成UTF8编码
	var filePathByte = Encoding.UTF8.GetBytes(filePath);
	//再转为Base64
	subFilePath = Convert.ToBase64String(filePathByte);
    RestProxy.RestPostAsync<bool, Stream>(GetFileMethodUrl("Method", subFilePath), fileContent, callBack, config);

服务端接收处理:
服务端转换过程和客户端的转换过程相反,服务对接收到的URL要先进行URL base 64 转换 再进行UTF8 转换

	//base64 转换
	subFilePath = Convert.FromBase64String(subFilePath));
	//UTF8 转换
	subFilePath = subFilePath = Encoding.UTF8.GetString(subFilePath );
	//针对"\\"进行特殊处理
	while (subFilePath.StartsWith("\\"))
    {
        subFilePath = subFilePath.Remove(0, 1);
    }

上述方法可以解决文件路径当URL的一部分来传递时遇到异常的情况

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值