C#有关URL中特殊字符的处理_c# 特殊字符处理_hubaxiaofeiyu的博客-程序员秘密

技术标签: C#  c#  asp.net  url  

一、问题 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的一部分来传递时遇到异常的情况

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44997008/article/details/108760643

智能推荐

java list 循环赋值_Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理_成政睿的博客-程序员秘密

1、利用stream().forEach()循环处理List;List list = Lists.newArrayList();//新建一个List 用的google提供的Guava package com.google.common.collect;list.add("1");list.add("2");list.add("3");list.stream().forEach(string -&g...

linux中的正则表达式,sed,awk学习笔记_指尖滑不过忧伤的博客-程序员秘密

1,正则表达式几个特殊符号[:alnum:] 0-9.A-Z,a-z[:digit:] 0-9[:upper:] A-Z[:lower:] a-z[:alpha:] a-z,A-Z. 代表一个任意字符* 重复0-∞个前面的字符基础的正则表达式1,grep -n 'the' 1.txt---- 表示在1.txt中查出带有“the”的并展示2,gre...

vue element中引入阿里巴巴矢量图标库_element中引入矢量图_maybe28的博客-程序员秘密

选择好自己想要的图标加入购物车,添加至自己的某一个项目中。️在更多操作中,我们需要对项目进行一个编辑。这里的设置主要是为了不和element的图标冲突。然后下载到本地之后,放在src/assets下。在iconfont.css中进行修改。增加一段如图所示的代码:[class^=&quot;el-icon-ump&quot;], [class*=&quot; el-icon-ump&quot;] { font-...

红米Note 5详细卡刷开发版获得root超级权限的步骤_weixin_33749242的博客-程序员秘密

小米的机器不同手机型号一般情况下miui论坛都提供两个不同版本,大概分为稳定版和开发版,稳定版没有提供ROOT权限管理,开发版中就支持了ROOT权限,很多时候我们需要使用的一些功能强大的APP,都需要在ROOT权限下工作,比如我们单位在使用的营销引流APP引号精灵,就是需要有ROOT权限才能进行正常启动,但很多时候,我们新买到的手机一般情况下默认安装的是小米系统的稳定版,这个时候我们需要将红米No...

vc6.0 调试程序,终止调试时程序却无法退出_Fly-Skyline的博客-程序员秘密

详情描述:在使用vc6.0(系统:windows 7 64 bit)调试程序时遇到终止调试时,程序无法退出的情况。由于无法直接关闭调试程序的进程,

随便推点

解决Spring5源码编译各种Gradle报错问题_spring源码编译指定gradle版本失效_栗子木的博客-程序员秘密

1. 前言最近希望能够学习一下Spring最新的源码,特意去GitHub上拉取Spring的源码.结果碰到各种Gradle报错问题,因为本人没有学习过Gradle,项目一直以来使用的都是Maven进行依赖管理.所以摸索过程中也是遇到各种问题,今天在这里给大家分享一下如何编译Spring的源码.2. 编译步骤 2.1拉取代码Spring源码托管在GitHub上,所以我们需要到GitHub上进行代码拉取https://github.com/spring-projects/sprin...

(转)代码重构_oldbalck的博客-程序员秘密

重构 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。  也许有人会问,为什么不在项目开始时多花些时间把设计做好,而要以后花时间来重构呢?要知道一个完美得可以预见未来任何变化的设计,或一个灵活得可以容纳任何扩展的设计是不存在的。系统设计人员对即将着手的项目...

Newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ_LarryNLPIR的博客-程序员秘密

Newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现系列5篇博文自发表半年多来,累计浏览量近万次,Eclipse工程下载累计近千次,受到了很多朋友的关注,如果能给各位数据挖掘入门学习带来一些帮助本人感到很高兴。有很多朋友阅读代码成功运行工程输出了博文中展示的文本分类及聚类结果,但是有的朋友遇到编译失败或者配置路径错误等问题,半年来我也收到很多站内信和评论询问这

java、php、.net关于web开发的区别_张嘉楠2046的博客-程序员秘密

一提到web开发,目前在世界上流行性的三个帮派就是php,java和asp.net,这个世界上的百分之99的网站或者类似的应用都是由则三种语言的开发,这里请原谅我忽视某些小众语言如python之类。三种语言经过长达十几甚至二十多年的发展形成自己的生态圈,生态圈里面的世界千姿百态,生态圈外面的世界大漠黄沙、寒风凌厉。所以不管你是准备进入web开发的新人还是准备转型其它生态系统的老鸟,这篇文章都能给你

北京1954坐标转为经纬度坐标_北京54转经纬度_themingyi的博客-程序员秘密

种种原因最近(20200716)碰到了这个北京54坐标如何转换为经纬度坐标,网上找了不少内容,实在没有一个是比较贴心的,看到了使用Arcgis可以转换,但是测试之后还是果断放弃,真tm的费劲,果断放弃。折腾两天之后发现一个非常sweet的软件,下面贴出来分享给各位,直接上菜吧:Part--1:软件名字:CoordTrans.exe此软件简单易用,看了基本差不多,如果想进行其他的坐标转换就在相应的模块中选择尝试,中央子午线的设置要参考自己坐标转换点的一个比较接近的经度,软件到此位置。在

DB9串口管脚详解_串口db9引脚定义_qicheng777的博客-程序员秘密

一、公头和母头:DB9是9针的串口线,分为公头和母头。公头:泛指所有针式的接头(5针朝上,从左到右依次是1~9)母头:泛指所有插槽式的接头(5针朝上,从右到左依次是1~9)二、各管脚的功能:1 、DCD( Data Carrier Detect) :载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在

推荐文章

热门文章

相关标签