c#: UrlDecode()
1、源起:
KV需要解析从插件传来的URL网址,因为其可能经过编码,所以需要解码。
初用System.Web.HttpUtility.UrlDecode()这个函数,但根据用户环境crash场景,发现有.net framework库不全情况,即找不到System.Web.dll这个程序集。
居然有此等事情!
自写代码解析喽,在网上下载得System.Web源代码,抽离所需函数,满足需求,项目可以舍弃对System.Web的引用
2、UrlDecode(string str)
直贴代码以做备忘:
public static string UrlDecode(string str)
{
return UrlDecode(str, Encoding.UTF8);
} static void WriteCharBytes(IList buf, char ch, Encoding e)
{
if (ch > )
{
foreach (byte b in e.GetBytes(new char[] { ch }))
buf.Add(b);
}
else
buf.Add((byte)ch);
} static int GetInt(byte b)
{
char c = (char)b;
if (c >= '' && c <= '')
return c - ''; if (c >= 'a' && c <= 'f')
return c - 'a' + ; if (c >= 'A' && c <= 'F')
return c - 'A' + ; return -;
} static int GetChar(string str, int offset, int length)
{
int val = ;
int end = length + offset;
for (int i = offset; i < end; i++)
{
char c = str[i];
if (c > )
return -; int current = GetInt((byte)c);
if (current == -)
return -;
val = (val << ) + current;
} return val;
} static string UrlDecode(string s, Encoding e)
{
if (null == s)
return null; if (s.IndexOf('%') == - && s.IndexOf('+') == -)
return s; if (e == null)
e = Encoding.UTF8; long len = s.Length;
var bytes = new List<byte>();
int xchar;
char ch; for (int i = ; i < len; i++)
ch = s[i];
if (ch == '%' && i + < len && s[i + ] != '%')
{
if (s[i + ] == 'u' && i + < len)
{
// unicode hex sequence
xchar = GetChar(s, i + , );
if (xchar != -)
{
WriteCharBytes(bytes, (char)xchar, e);
i += ;
}
else
WriteCharBytes(bytes, '%', e);
}
else if ((xchar = GetChar(s, i + , )) != -)
{
WriteCharBytes(bytes, (char)xchar, e);
i += ;
}
else
{
WriteCharBytes(bytes, '%', e);
}
continue;
} if (ch == '+')
WriteCharBytes(bytes, ' ', e);
else
WriteCharBytes(bytes, ch, e);
} byte[] buf = bytes.ToArray();
bytes = null;
return e.GetString(buf);
}
3、简单验证
string url = "https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DLeghS9MH9xY";
url = UrlDecode(url);
Console.WriteLine(url); //url = https://www.youtube.com/watch?v=LeghS9MH9xY
c#: UrlDecode()的更多相关文章
- C++ URLDecode和URLEncode实现——仅限gb2312,非utf8
转载--http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/ #include <iostream> ...
- Python 中的urlencode和urldecode
python中的urlencode与urldecode 发表于2013/11/13 16:04:09 79983人阅读 分类: python 当url地址含有中文,或者参数有中文的时候,这个算是很正 ...
- c# UrlEncode,UrlDecode
用 C# winform 处理 utf-8,gb2312编码转换方法 首先,在项目属性 的 应用程序——目标框架中,选择 .NET Framework 4 然后再添加引用——.NET 中选择 ...
- HttpUtility.UrlDecode
如果在 HTTP 流中传递如空格或者标点符号等字符,它们可能会错误地解释在接收端. URL 编码转换为字符实体等效项; 不允许在 URL 中的字符URL 解码反转的编码. 例如,在嵌入到要在 URL ...
- php中urldecode()和urlencode()
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原 ...
- 关于URLEnCode,URLDeCode,Base64,公钥私钥
1.Base64非常适合http.mime协议,所以在一些类似webservice中可以用Base64. 用法如下:传出去之前先 Convert.ToBase64String(encryptedByt ...
- urldecode解码方法
输入为带有urldecode转码文本,输出正常文本. //20130625 by zhangyl private string ConvertToString(string input) { inpu ...
- Server.UrlEncode与Server.UrlDecode(url传递中文的解决方案)
1.设置web.config文件.<system.web> ...... <globalization requestEncoding="gb2312" resp ...
- python(24)urlencode和urldecode
当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode ur ...
- URLEncode与URLDecode总结与实现
URLEncode: 用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,例如:“啊”字 Ascii的十六进制是0xB ...
随机推荐
- Centos6与Centos7防火墙设置与端口开放的方法
Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld.所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld.更多关于CentOs防火墙的最新 ...
- struts2中的constant介绍之struts.objectFactory与spring的整合
struts2提供给我们更为灵活的设计,他的很多东西都是可以手动配置的,下面介绍下他的一些 常用的constant作用和配置 struts.objectFactory这个属性用于说明Struts2的 ...
- 配置maven访问nexus,配置项目pom.xml以发布maven项目到nexus中
maven访问nexus有三种配置方法,分别为: 项目pom.xml,优先级最高: user的settings.xml,优先级中,未在pom.xml中配置repository标签,则使用这个配置: m ...
- Kibana安装与基本用法(ELK)
强制使用smtp 465端口加密发送邮件: vim kibana.yml 添加如下: sentinl: settings: email: active: true user: wjoyxt@.com ...
- linux 时间相关的一些总结
仅作为内核代码中时间管理模块的笔记,3.10内核,很乱,不喜勿喷. 先有time,后有timer. 常用的time结构有哪些?除了大名鼎鼎的jiffies和jiffies64之外,还有常用的一些结构如 ...
- Nginx使用GZIP来压缩网页
HTTP协议上的GZIP编码是一种用来改进web应 用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中 ...
- Python正则表达式与re模块介绍
Python中通过re模块实现了正则表达式的功能.re模块提供了一些根据正则表达式进行查找.替换.分隔字符串的函数.本文主要介绍正则表达式先关内容以及re模块中常用的函数和函数常用场景. 正则表达式基 ...
- 如何配置windows定时任务
Windows上配置任务定时执行有两种方法.一是通过控制面板中的界面配置,另外一种是通过schtasks命令配置.如果是简单的定时任务配置(比如每天单次执行)建议选择界面的方式,简洁.直观.易上手.如 ...
- mac+windows下从git上拉取项目及运行
一.Mac下从git拉取项目 1. 拉项目 打开终端,先进入想放置项目的目录.假设进入workfile目录,输入cd workfile. 进入workfile目录后:输入git clone 链接(gi ...
- 【转】ubuntu 打开命令行窗口的方法
1. CTRL+ALT+T 2. ALT+F2调出Run a Command,输入gnome-terminal 3. 单击dash home这个按钮,输入te,就可以看到Terminal终端的选项了